간단하게 차트를 생성할 수 있는 Open API인 quickchart.io에 대한 차트 생성 실습

  • Gallery에서 예시 차트들을 확인할 수 있습니다.

QuickChart Editor

QuickChart Editor를 사용하여 차트를 직접 생성할 수 있습니다.

Quickchart Python

quickchart-python를 사용하여 파이썬에서 실행할 수 있습니다.

quickchart.io 설치 방법

1
pip install quickchart.io

예시 코드

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
from quickchart import QuickChart

qc = QuickChart()
qc.width = 500
qc.height = 300

# Config can be set as a string or as a nested dict
qc.config = """{
  type: 'bar',
  data: {
    labels: ['Q1', 'Q2', 'Q3', 'Q4'],
    datasets: [{
      label: 'Users',
      data: [50, 60, 70, 180]
    }]
  }
}"""

# You can get the chart URL...
print(qc.get_url())

# Get the image as a variable...
image = qc.get_image()

# Or write the chart to a file
qc.to_file('mychart.png')

결과

  • Bar 그래프 quickchart

실습 : 한국 코로나19 감염 추이

Python 스크립트에서 Quick Chart 모듈을 사용하지 않고 json 파라미터 형식으로 전달했습니다.

코드

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
chart = {
    "type": "bar",
    "data": {
        "labels": self.chart_labels,
        "datasets": [
            {
                "type": "line",
                "label": text.get('plot_data_one'),
                "borderColor": "rgb(255, 99, 132)",
                "backgroundColor": "rgba(255, 99, 132, 0.5)",
                "fill": "false",
                "data": self.chart_data
            }
        ]
    },
    "options": {
        "title": {
            "display": "true",
            "text": text.get('plot_title'),
        },
        "scales": {
            "xAxes": [
                { "scaleLabel": { "display": "true", "labelString": text.get('plot_xlabel') } }
            ],
            "yAxes": [
                {
                    "ticks": { "beginAtZero": "true" },
                    "scaleLabel": { "display": "true", "labelString": text.get('plot_ylabel') },
                }
            ]
        }
    }
}

chartUrl = 'https://quickchart.io/chart?bkg=%23ffffff&c='
chartUrl += parse.urlencode({'data': json.dumps(chart)})

결과

  • Line 그래프 quickchart

실습 : 이중 파이/도넛 그래프

코드

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
{
  type: 'doughnut',
  data: {
    datasets: [
      {
        data: [27, 26, 85, 2],
        backgroundColor: [
          'rgb(255, 99, 132)',
          'rgb(255, 159, 64)',
          'rgb(255, 205, 86)',
          'rgb(75, 192, 192)',
          'rgb(54, 162, 235)',
        ],
      },
      {
        data: [27, 0, 26, 0, 67, 18, 0, 2],
        backgroundColor: [
          'rgb(255, 99, 132)',
          'rgb(255, 255, 255)',
          'rgb(255, 159, 64)',
          'rgb(255, 255, 255)',
          'rgb(255, 205, 86)',
          'rgb(255, 255, 255)',
          'rgb(75, 192, 192)',
          'rgb(255, 255, 255)',
          'rgb(54, 162, 235)',
          'rgb(255, 255, 255)',
        ],
      },
    ],
    labels: ['Chocolate', 'Mont Blanc', 'Cheese Cake', 'Macaron'],
  },
  options: {
    title: {
      display: true,
      text: 'Donut Chart(2022.12.30)',
    },
    plugins: {
      datalabels: {
        display: true,
        formatter: (data, ctx) => {
          if (ctx.datasetIndex == 1 && (ctx.dataIndex % 2 == 1 || ctx.dataIndex == 6)) {
            return null;
          } else {
            return data + '명';
          }
        },
        color: '#444',
        font: {
          size: 12,
        },
      },
      doughnutlabel: {
        labels: [
          {
            text: '전체 합계',
            font: {
              size: 12,
            }
          },
          {
            text: '140명',
            font: {
              size: 15,
              weight: 'bold'
            }
          },
          {
            text: '',
          },
          {
            text: '안쪽 파이 합계',
            font: {
              size: 12,
            }
          },
          {
            text: '120명',
            font: {
              size: 15,
              weight: 'bold'
            }
          },
        ]
      }
    }
  }
}

코드 경량화(Minify)

https://www.minifier.org/

차트 배경 색 설정

images

결과

  • Double doughnut 그래프 chart

Reference

태그:

카테고리:

업데이트:

댓글남기기