반응형
+구글차트API를 json연동하여 예제+
아래링크를 참고한다.
https://developers.google.com/chart/interactive/docs/gallery/linechart
선 차트 | Charts | Google Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 선 차트 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 개요 SVG 또는 VML을
developers.google.com
주의사항
최근릴리즈된 구글차트 api경우 이전에 개발된 소스로 하면 아래와 같은 오류가 발생된다.
아래 오류 발생시 current말고 버전숫자를 입력
Cannot read properties of undefined (reading 'length')
<!-- 최신버전 -->
google.charts.load('current', {'packages':['line', 'corechart']});
<!-- 특정버전 51 아래로 -->
google.charts.load('51', {'packages':['line', 'corechart']});
라인차트 (X,Y 축) 예제 - Creating Material Line Charts
아래샘플소스는 2023/4월 릴리즈된 api소스가 아닌 2021년 릴리즈된 소스로 개발되었다.
ajax의 data.chartList 데이터는 백엔드 데이터는 스프링 기준 List<VO> 또는 List<Map> 형식으로 받아오면 된다.
//html소스
<div id="line_chart"></div>
//스크립트소스
var global_count = 0;
const global_format_time = 'yyyy.MM.dd HH:mm';
google.charts.load('51', {'packages':['line', 'corechart']});
google.charts.setOnLoadCallback(chartData);
function chartData(){
$.ajax({
//.........코드작성
url : ...,
contentType:"application/json",
dataType:"json",
}).done(function(data) {
var chartList = data.chartList;
var options = {
title : 'Device A',
series: {},
legend: { position: 'top', alignment: 'start' },
pointsVisible: true,
pointSize: 4,
theme: 'material',
vAxes: {
0: {title: '온도 °C'}
},
hAxis: {
format: global_format,
gridlines:{
count:10
}
},
};
var data_table = new google.visualization.DataTable();
data_table.addColumn('date', 'Time of Day');
data_table.addColumn('number', "온도 °C");
if(chartList.length > 0){
data_table.addRows(chartList.length);
}else{
data_table.addRows(1);
}
$.each(chartList, function(i, obj) {
var global_count = 0;
//ex) chartDate : 20230102112233
var yyyy = Number(obj.chartDate.substring(0, 4));
var mm = Number(obj.chartDate.substring(4, 6))-1;
var dd = Number(obj.chartDate.substring(6, 8));
var hh = Number(obj.chartDate.substring(8, 10));
var mm24 = Number(obj.chartDate.substring(10, 12));
var ss = Number(obj.chartDate.substring(12, 14));
data_table.setCell(i,global_count,new Date(yyyy,mm,dd,hh,mm24,ss));
global_count++;
data_table.setCell(i,global_count,parseFloat(obj.returnAirTemperature));
options['series'][global_count-1] = {targetAxisIndex: 0, color:"#4374D9"};
global_count++;
});
var date_formatter = new google.visualization.DateFormat({
pattern: global_format_time
});
date_formatter.format(data_table, 0);
var chart = new google.visualization.LineChart(document.getElementById('line_chart'));
chart.draw(data_table, google.charts.Line.convertOptions(options));
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
});
}
실행화면
이중Y차트예제 - Dual-Y Charts
위소스내용에서 ajax 부분만 수정하면된다.
//html소스
<div id="line_chart"></div>
//스크립트소스
var global_count = 0;
const global_format_time = 'yyyy.MM.dd HH:mm';
google.charts.load('51', {'packages':['line', 'corechart']});
google.charts.setOnLoadCallback(chartData);
$.ajax({
.....
}).done(function(data) {
var chartList = data.chartList;
var options = {
title : 'Device A',
series: {},
legend: { position: 'top', alignment: 'start' },
pointsVisible: true,
pointSize: 4,
theme: 'material',
vAxes: {
0: {title: '온도 °C'},
1: {title: '습도 %'}
},
hAxis: {
format: global_format,
gridlines:{
count:10
}
},
};
var data_table = new google.visualization.DataTable();
data_table.addColumn('date', 'Time of Day');
data_table.addColumn('number', "온도 °C");
data_table.addColumn('number', "습도 %");
if(chartList.length > 0){
data_table.addRows(chartList.length);
}else{
data_table.addRows(1);
}
$.each(chartList, function(i, obj) {
var global_count = 0;
var yyyy = Number(obj.chartDate.substring(0, 4));
var mm = Number(obj.chartDate.substring(4, 6))-1;
var dd = Number(obj.chartDate.substring(6, 8));
var hh = Number(obj.chartDate.substring(8, 10));
var mm24 = Number(obj.chartDate.substring(10, 12));
var ss = Number(obj.chartDate.substring(12, 14));
data_table.setCell(i,global_count,new Date(yyyy,mm,dd,hh,mm24,ss));
global_count++;
data_table.setCell(i,global_count,parseFloat(obj.temperatureSetpoint));
options['series'][global_count-1] = {targetAxisIndex: 0, color:"#4374D9"};
global_count++;
data_table.setCell(i,global_count,parseFloat(obj.humidity));
options['series'][global_count-1] = {targetAxisIndex: 1, color:"#109618"};
global_count++;
});
var date_formatter = new google.visualization.DateFormat({
pattern: global_format_time
});
date_formatter.format(data_table, 0);
var chart = new google.visualization.LineChart(document.getElementById('line_chart'));
chart.draw(data_table, google.charts.Line.convertOptions(options));
}).fail(function (jqXHR, textStatus, errorThrown) {
console.log(errorThrown);
});
실행화면
반응형
'개발 > 기타' 카테고리의 다른 글
[jsTree] Spring + jstree 트리예제 (0) | 2023.04.07 |
---|---|
[React] react v18 필수개념 컴포넌트+props 예제 (0) | 2023.04.04 |
SQL 쿼리문 예제모음 초급용 30개 (0) | 2023.03.28 |
SQL 쿼리문 예제모음 30개 및 쿼리도구 추천 (0) | 2023.03.26 |
c언어 자료구조, 버블정렬 예제모음 (0) | 2023.03.19 |