[displayFn] plotly

Chart.js 이외에 여러 차트 선택지를 추가하였습니다.

display: plotly

  • plotly 스크립트를 사용할 수 있습니다.
  • ChatGPT 등을 통해 더 잘 활용할 수 있습니다. (e.g. “plotly로 bar 그리는 js 코드를 알려줘”)

displayFn

  • block.id와 displayFn안에 차트를 그릴때 ID가 동일해야합니다.
  • sqlMany 기능이 추가되었습니다. (여러개 쿼리 실행시 rows[0], rows[1] 안에 각각 결과가 담깁니다: 지난주/이번주 데이터 비교 등에 사용 가능)
  • displayFn안에서 쓸수있는 변수: rows, id, openModal, openAction, _ lodash 데이터 처리용

예시1 YAML 코드

menus:
- path: pages/8y_rbk-1
  name: plotly 1
pages:
- path: pages/8y_rbk-1
  # title: 제목
  # subtitle: 내용
  blocks:
  - type: query
    resource: mysql.qa
    sqlType: select
    sql: >
      SELECT DATE(created_at), COUNT(id) FROM TestLog 
      WHERE created_at > '2024-05-15'
      GROUP BY 1
    modals:
      - path: view
        blocks:
          - type: query
            resource: mysql.qa
            sqlType: select
            sql: SELECT :id
            params:
              - key: id
                valueFromRow: id

    display: plotly
    id: bar-chart
    style:
      height: 500px
      widht: 200px
    displayFn: |
      // 데이터 정의
      var trace1 = {
          x: ['Category A', 'Category B', 'Category C'],
          y: [20, 14, 23],
          name: 'Series 1',
          type: 'bar',
          marker: {
              color: 'rgba(255, 99, 132, 0.6)',
              line: {
                  color: 'rgba(255, 99, 132, 1.0)',
                  width: 2
              }
          }
      };

      var trace2 = {
          x: ['Category A', 'Category B', 'Category C'],
          y: [12, 18, 29],
          name: 'Series 2',
          type: 'bar',
          marker: {
              color: 'rgba(54, 162, 235, 0.6)',
              line: {
                  color: 'rgba(54, 162, 235, 1.0)',
                  width: 2
              }
          }
      };

      var trace3 = {
          x: ['Category A', 'Category B', 'Category C'],
          y: [30, 22, 17],
          name: 'Series 3',
          type: 'bar',
          marker: {
              color: 'rgba(75, 192, 192, 0.6)',
              line: {
                  color: 'rgba(75, 192, 192, 1.0)',
                  width: 2
              }
          }
      };

      var data = [trace1, trace2, trace3];

      // 레이아웃 정의
      var layout = {
          title: 'Complex Bar Chart',
          xaxis: {
              title: 'Categories',
              tickangle: -45
          },
          yaxis: {
              title: 'Values',
              range: [0, 40]
          },
          barmode: 'group',
          bargap: 0.2,
          bargroupgap: 0.1,
          annotations: [
              {
                  x: 'Category A',
                  y: 30,
                  xref: 'x',
                  yref: 'y',
                  text: 'Highest Value in Category A',
                  showarrow: true,
                  arrowhead: 7,
                  ax: 0,
                  ay: -40
              }
          ]
      };

      // 차트 그리기
      Plotly.newPlot('bar-chart', data, layout);

예시2 YAML 코드

menus:
- path: pages/8y_rbk-2
  name: plotly 2
pages:
- path: pages/8y_rbk-2
  # title: 제목
  # subtitle: 내용
  blocks:
  - type: query
    resource: mysql.qa
    sqlType: select
    sql: >
      SELECT DATE(created_at), COUNT(id) FROM TestLog 
      WHERE created_at > '2024-05-15'
      GROUP BY 1
    modals:
      - path: view
        blocks:
          - type: query
            resource: mysql.qa
            sqlType: select
            sql: SELECT :id
            params:
              - key: id
                valueFromRow: id


    display: plotly
    id: bar-chart
    style:
      height: 500px
      widht: 200px
    displayFn: |
      // 데이터 정의
      var data = [
          {
              x: ['Category A', 'Category B', 'Category C'],
              y: [20, 14, 23],
              type: 'bar'
          }
      ];

      // 레이아웃 정의
      var layout = {
          title: 'Sample Bar Chart',
          xaxis: {
              title: 'Categories'
          },
          yaxis: {
              title: 'Values'
          }
      };

      // 차트 그리기
      Plotly.newPlot('bar-chart', data, layout);