본문 바로가기

JAVA HTML JAVASCRIPT/소오스

구글 차트 api

728x90
반응형

구글차트(Google Chart) 사용해서 그래프 생성하기 - 라인차트, 컨트롤

 

 

 

구글차트(google-chart)의 line 그래프와 그래프에서 원하는 구간만 볼 수 있는 컨트롤바 생성 소스코드입니다.

주제와 데이터는 임의로 지정하였으며, 원한다면 DB의 데이터를 사용할 수 있습니다.

 

 


 

화면

 * 10월 14일자 데이터는 클릭했을 경우, 10월 23일자 데이터는 마우스 포인터를 올려놨을 경우에 나오는 툴팁입니다.

 * 그래프 아래에 컨트롤 바가 실제 그래프의 미니버전(?) 으로 출력됩니다. (사이즈 조절 가능, 다른 그래프로 대체 가능)

 

 

 

GIF

 * 컨드롤바에서 그래프 중 구간(범위)을 선택하여 원하는 날짜의 그래프를 확대해서 볼 수 있습니다.

 * 화면 크기에 따라 그래프와 컨트롤바의 크기도 달라집니다.(반응형웹에서 사용가능)

 

 


 

첨부파일 & GitHub

 

 GoogleChart.zip

GitHub    : https://github.com/89dev/JS-google_chart

참조        : https://google-developers.appspot.com/chart/interactive/docs/gallery

 


 

소스코드

*html 한 페이지에 구성했습니다. (jsp파일에서도 당연히 사용 가능해요.)

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8">

    <title>Line_Controls_Chart</title>

 

    <!-- jQuery -->

    <script src="https://code.jquery.com/jquery.min.js"></script>

    <!-- google charts -->

       <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

  </head>

  <body>

 

    <h4>사이트 방문자 성별 현황 그래프</h4>

 

    <div id="Line_Controls_Chart">

      <!-- 라인 차트 생성할 영역 -->

          <div id="lineChartArea" style="padding:0px 20px 0px 0px;"></div>

      <!-- 컨트롤바를 생성할 영역 -->

          <div id="controlsArea" style="padding:0px 20px 0px 0px;"></div>

        </div>

 

  </body>

 

  <script>

 

  var chartDrowFun = {

 

    chartDrow : function(){

        var chartData = '';

 

        //날짜형식 변경하고 싶으시면 이 부분 수정하세요.

        var chartDateformat     = 'yyyy년MM월dd일';

        //라인차트의 라인 수

        var chartLineCount    = 10;

        //컨트롤러 바 차트의 라인 수

        var controlLineCount    = 10;

 

 

        function drawDashboard() {

 

          var data = new google.visualization.DataTable();

          //그래프에 표시할 컬럼 추가

          data.addColumn('datetime' , '날짜');

          data.addColumn('number'   , '남성');

          data.addColumn('number'   , '여성');

          data.addColumn('number'   , '전체');

 

          //그래프에 표시할 데이터

          var dataRow = [];

 

          for(var i = 0; i <= 29; i++){ //랜덤 데이터 생성

            var total   = Math.floor(Math.random() * 300+ 1;

            var man     = Math.floor(Math.random() * total) + 1;

            var woman   = total - man;

 

            dataRow = [new Date('2017''09', i , '10'), man, woman , total];

            data.addRow(dataRow);

          }

 

 

            var chart = new google.visualization.ChartWrapper({

              chartType   : 'LineChart',

              containerId : 'lineChartArea'//라인 차트 생성할 영역

              options     : {

                              isStacked   : 'percent',

                              focusTarget : 'category',

                              height          : 500,

                              width              : '100%',

                              legend          : { position: "top", textStyle: {fontSize: 13}},

                              pointSize        : 5,

                              tooltip          : {textStyle : {fontSize:12}, showColorCode : true,trigger: 'both'},

                              hAxis              : {format: chartDateformat, gridlines:{count:chartLineCount,units: {

                                                                  years : {format: ['yyyy년']},

                                                                  months: {format: ['MM월']},

                                                                  days  : {format: ['dd일']},

                                                                  hours : {format: ['HH시']}}

                                                                },textStyle: {fontSize:12}},

                vAxis              : {minValue: 100,viewWindow:{min:0},gridlines:{count:-1},textStyle:{fontSize:12}},

                animation        : {startup: true,duration: 1000,easing: 'in' },

                annotations    : {pattern: chartDateformat,

                                textStyle: {

                                fontSize: 15,

                                bold: true,

                                italic: true,

                                color: '#871b47',

                                auraColor: '#d799ae',

                                opacity: 0.8,

                                pattern: chartDateformat

                              }

                            }

              }

            });

 

            var control = new google.visualization.ControlWrapper({

              controlType: 'ChartRangeFilter',

              containerId: 'controlsArea',  //control bar를 생성할 영역

              options: {

                  ui:{

                        chartType: 'LineChart',

                        chartOptions: {

                        chartArea: {'width''60%','height' : 80},

                          hAxis: {'baselineColor''none', format: chartDateformat, textStyle: {fontSize:12},

                            gridlines:{count:controlLineCount,units: {

                                  years : {format: ['yyyy년']},

                                  months: {format: ['MM월']},

                                  days  : {format: ['dd일']},

                                  hours : {format: ['HH시']}}

                            }}

                        }

                  },

                    filterColumnIndex: 0

                }

            });

 

            var date_formatter = new google.visualization.DateFormat({ pattern: chartDateformat});

            date_formatter.format(data, 0);

 

            var dashboard = new google.visualization.Dashboard(document.getElementById('Line_Controls_Chart'));

            window.addEventListener('resize'function() { dashboard.draw(data); }, false); //화면 크기에 따라 그래프 크기 변경

            dashboard.bind([control], [chart]);

            dashboard.draw(data);

 

        }

          google.charts.setOnLoadCallback(drawDashboard);

 

      }

    }

 

$(document).ready(function(){

  google.charts.load('current', {'packages':['line','controls']});

  chartDrowFun.chartDrow(); //chartDrow() 실행

});

  </script>

</html>

 

Colored by Color Scripter

cs

 

 



출처: https://private.tistory.com/66 [공부해서 남 주자]

728x90
반응형

'JAVA HTML JAVASCRIPT > 소오스' 카테고리의 다른 글

문자열 자르기(Substring, Split) 사용법 & 예제  (0) 2020.07.29
[API] Chart.js  (0) 2020.03.30
@Resource  (0) 2020.03.25
@Autowired  (0) 2020.03.25
jQuery / Method / .each()  (0) 2020.03.20