도움말

도움말: 소개

툴팁은 무언가에 마우스를 가져가면 표시되는 작은 상자입니다. 호버 카드는 더 일반적이며 화면의 아무 곳에나 표시될 수 있습니다. 도움말은 항상 분산형 차트의 점 또는 막대 그래프의 막대와 같은 항목에 첨부됩니다.

이 문서에서는 Google 차트에서 도움말을 만들고 맞춤설정하는 방법을 설명합니다.

도움말 유형 지정

Google 차트는 모든 핵심 차트에 대한 도움말을 자동으로 만듭니다. 기본적으로 SVG로 렌더링되지만 VML로 렌더링되는 IE 8은 예외입니다. draw() 호출에 전달된 차트 옵션tooltip.isHtml: true를 지정하여 핵심 도움말의 HTML 도움말을 만들 수 있습니다. 이렇게 하면 도움말 작업을 만들 수도 있습니다.

표준 도움말

맞춤 콘텐츠가 없는 경우 도움말 콘텐츠가 기본 데이터를 기반으로 자동 생성됩니다. 차트의 막대 위로 마우스를 가져가면 도움말을 볼 수 있습니다.

막대 위에 마우스를 가져가면 표준 도움말을 볼 수 있습니다.

도움말 콘텐츠 맞춤설정

이 예시에서는 새 열을 DataTable에 추가하고 도움말 역할로 표시하여 도움말에 커스텀 콘텐츠를 추가합니다.

참고: 풍선형 차트 시각화에서는 지원되지 않습니다.

        google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var dataTable = new google.visualization.DataTable();
        dataTable.addColumn('string', 'Year');
        dataTable.addColumn('number', 'Sales');
        // A column for custom tooltip content
        dataTable.addColumn({type: 'string', role: 'tooltip'});
        dataTable.addRows([
          ['2010', 600,'$600K in our first year!'],
          ['2011', 1500, 'Sunspot activity made this our best year ever!'],
          ['2012', 800, '$800K in 2012.'],
          ['2013', 1000, '$1M in sales last year.']
        ]);

        var options = { legend: 'none' };
        var chart = new google.visualization.ColumnChart(document.getElementById('tooltip_action'));
        chart.draw(dataTable, options);
      }

HTML 도움말 사용

이 예에서는 HTML 도움말을 사용 설정하여 이전 예시를 기반으로 빌드합니다. 차트 옵션에 tooltip.isHtml: true가 추가되었습니다.

google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var dataTable = new google.visualization.DataTable();
        dataTable.addColumn('string', 'Year');
        dataTable.addColumn('number', 'Sales');
        // A column for custom tooltip content
        dataTable.addColumn({type: 'string', role: 'tooltip'});
        dataTable.addRows([
          ['2010', 600,'$600K in our first year!'],
          ['2011', 1500, 'Sunspot activity made this our best year ever!'],
          ['2012', 800, '$800K in 2012.'],
          ['2013', 1000, '$1M in sales last year.']
        ]);

        var options = {
          tooltip: {isHtml: true},
          legend: 'none'
        };
        var chart = new google.visualization.ColumnChart(document.getElementById('col_chart_html_tooltip'));
        chart.draw(dataTable, options);
      }

많이 다르진 않지만 HTML을 맞춤설정할 수 있습니다.

HTML 콘텐츠 맞춤설정

이전 예에는 일반 텍스트 콘텐츠와 함께 모든 도움말이 사용되었지만 HTML 마크업을 사용하여 맞춤설정할 수 있으면 HTML 도움말의 진정한 강점을 활용할 수 있습니다. 사용 설정하려면 다음 두 가지 작업을 수행해야 합니다.

  1. 차트 옵션에서 tooltip.isHtml: true을 지정합니다. 그러면 차트에 SVG가 아닌 HTML로 도움말을 그립니다.
  2. html 맞춤 속성으로 데이터 테이블의 전체 열 또는 특정 셀을 표시합니다. 툴팁 역할과 HTML 속성이 포함된 데이터 테이블 열은 다음과 같습니다.
    dataTable.addColumn({'type': 'string', 'role': 'tooltip', 'p': {'html': true}})

    참고: 풍선형 차트 시각화에는 사용할 수 없습니다. 풍선형 차트 HTML 도움말의 콘텐츠는 맞춤설정할 수 없습니다.

중요: 도움말의 HTML을 신뢰할 수 있는 출처에서 가져와야 합니다. 맞춤 HTML 콘텐츠에 사용자 제작 콘텐츠가 포함된 경우 해당 콘텐츠를 이스케이프 처리해야 합니다. 그렇지 않으면 시각적 시각화가 XSS 공격에 노출될 수 있습니다.

맞춤 HTML 콘텐츠는 <img> 태그를 추가하거나 텍스트를 굵게 표시하는 것만큼이나 간단할 수 있습니다.

맞춤 HTML 콘텐츠에는 동적으로 생성된 콘텐츠도 포함될 수 있습니다. 여기에서는 각 카테고리 값에 대해 동적으로 생성된 테이블이 포함된 도움말을 추가합니다. 도움말은 행 값에 연결되므로 막대 위에 마우스를 가져가면 HTML 도움말이 표시됩니다.

이 예에서는 커스텀 HTML 도움말을 도메인 열에 연결하는 방법을 보여줍니다. (이전 예에서는 데이터 열에 연결되었음) 도메인 축에 대한 도움말을 사용 설정하려면 focusTarget: 'category' 옵션을 설정합니다.

function drawChart() {
  var dataTable = new google.visualization.DataTable();
  dataTable.addColumn('string', 'Country');
  // Use custom HTML content for the domain tooltip.
  dataTable.addColumn({'type': 'string', 'role': 'tooltip', 'p': {'html': true}});
  dataTable.addColumn('number', 'Gold');
  dataTable.addColumn('number', 'Silver');
  dataTable.addColumn('number', 'Bronze');

  dataTable.addRows([
    ['USA', createCustomHTMLContent('https://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg', 46, 29, 29), 46, 29, 29],
    ['China', createCustomHTMLContent('https://upload.wikimedia.org/wikipedia/commons/f/fa/Flag_of_the_People%27s_Republic_of_China.svg', 38, 27, 23), 38, 27, 23],
    ['UK', createCustomHTMLContent('https://upload.wikimedia.org/wikipedia/commons/a/ae/Flag_of_the_United_Kingdom.svg', 29, 17, 19), 29, 17, 19]
  ]);

  var options = {
    title: 'London Olympics Medals',
    colors: ['#FFD700', '#C0C0C0', '#8C7853'],
    // This line makes the entire category's tooltip active.
    focusTarget: 'category',
    // Use an HTML tooltip.
    tooltip: { isHtml: true }
  };

  // Create and draw the visualization.
  new google.visualization.ColumnChart(document.getElementById('custom_html_content_div')).draw(dataTable, options);
}

function createCustomHTMLContent(flagURL, totalGold, totalSilver, totalBronze) {
  return '<div style="padding:5px 5px 5px 5px;">' +
      '<img src="' + flagURL + '" style="width:75px;height:50px"><br/>' +
      '<table class="medals_layout">' + '<tr>' +
      '<td><img src="https://upload.wikimedia.org/wikipedia/commons/1/15/Gold_medal.svg" style="width:25px;height:25px"/></td>' +
      '<td><b>' + totalGold + '</b></td>' + '</tr>' + '<tr>' +
      '<td><img src="https://upload.wikimedia.org/wikipedia/commons/0/03/Silver_medal.svg" style="width:25px;height:25px"/></td>' +
      '<td><b>' + totalSilver + '</b></td>' + '</tr>' + '<tr>' +
      '<td><img src="https://upload.wikimedia.org/wikipedia/commons/5/52/Bronze_medal.svg" style="width:25px;height:25px"/></td>' +
      '<td><b>' + totalBronze + '</b></td>' + '</tr>' + '</table>' + '</div>';
}

회전 툴팁

Google 차트의 도움말은 CSS로 회전할 수 있습니다. 아래 차트에서 이 인라인 CSS를 사용하여 차트 div 직전에 도움말이 시계 방향으로 30° 회전합니다.

<style>div.google-visualization-tooltip { transform: rotate(30deg); }</style>

이는 isHtml: true 툴팁과 같은 HTML 도움말에만 적용됩니다.

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {

        var data = google.visualization.arrayToDataTable([
          ['Year', 'Fixations'],
          ['2015',  80],
          ['2016',  90],
          ['2017',  100],
          ['2018',  90],
          ['2019',  80],
        ]);

        var options = {
          tooltip: { isHtml: true },    // CSS styling affects only HTML tooltips.
          legend: { position: 'none' },
          bar: { groupWidth: '90%' },
          colors: ['#A61D4C']
        };

        var chart = new google.visualization.ColumnChart(document.getElementById('tooltip_rotated'));

        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <!-- The next line rotates HTML tooltips by 30 degrees clockwise. -->
    <style>div.google-visualization-tooltip { transform: rotate(30deg); }</style>
    <div id="tooltip_rotated" style="width: 400px; height: 400px;"></div>
  </body>
</html>

도움말에 차트 배치

HTML 도움말에는 Google 차트까지도 대부분의 HTML 콘텐츠가 포함될 수 있습니다. 사용자는 팁 안에 있는 차트를 통해 데이터 요소 위로 마우스를 가져갈 때 추가 정보를 얻을 수 있습니다. 사용자가 한눈에 확인하고 높은 수준의 세부정보를 제공하는 동시에 사용자가 원할 때 더 자세히 알아볼 수 있도록 하는 좋은 방법입니다.

아래의 열 차트에는 여러 주요 스포츠 이벤트의 최근 시청률이 차트로 나와 있으며 각 팁에는 지난 10년 동안의 평균 시청률 선 차트가 표시됩니다.

여기서 몇 가지 유의해야 할 점이 있습니다. 먼저 도움말에 각 데이터 세트마다 인쇄 가능한 차트를 그려야 합니다. 둘째, 각 도움말 차트에는 인쇄 가능한 차트를 만들기 위해 addListener를 통해 호출하는 '준비된' 이벤트 핸들러가 필요합니다.

중요: 모든 도움말 차트는 기본 차트 앞에 그려야 합니다. 이 작업은 이미지를 가져와 기본 차트의 DataTable에 추가하기 위해 필요합니다.

중요한 부분
      // Draws your charts to pull the PNGs for your tooltips.
      function drawTooltipCharts() {

        var data = new google.visualization.arrayToDataTable(tooltipData);
        var view = new google.visualization.DataView(data);

        // For each row of primary data, draw a chart of its tooltip data.
        for (var i = 0; i < primaryData.length; i++) {

          // Set the view for each event's data
          view.setColumns([0, i + 1]);

          var hiddenDiv = document.getElementById('hidden_div');
          var tooltipChart = new google.visualization.LineChart(hiddenDiv);

          google.visualization.events.addListener(tooltipChart, 'ready', function() {

            // Get the PNG of the chart and set is as the src of an img tag.
            var tooltipImg = '<img src="' + tooltipChart.getImageURI() + '">';

            // Add the new tooltip image to your data rows.
            primaryData[i][2] = tooltipImg;

          });
          tooltipChart.draw(view, tooltipOptions);
        }
        drawPrimaryChart();
      }

      function drawPrimaryChart() {

        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Event');
        data.addColumn('number', 'Highest Recent Viewership');

        // Add a new column for your tooltips.
        data.addColumn({
          type: 'string',
          label: 'Tooltip Chart',
          role: 'tooltip',
          'p': {'html': true}
        });

        // Add your data (with the newly added tooltipImg).
        data.addRows(primaryData);

        var visibleDiv = document.getElementById('visible_div');
        var primaryChart = new google.visualization.ColumnChart(visibleDiv);
        primaryChart.draw(data, primaryOptions);

      }
전체 웹페이지
<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawTooltipCharts);

      // Set up data for visible chart.
      var primaryData = [
        ['NBA Finals', 22.4],
        ['NFL Super Bowl', 111.3],
        ['MLB World Series', 19.2],
        ['UEFA Champions League Final', 1.9],
        ['NHL Stanley Cup Finals', 6.4],
        ['Wimbledon Men\'s Championship', 2.4]
      ];

      // Set up data for your tooltips.
      var tooltipData = [
        ['Year', 'NBA Finals', 'NFL Super Bowl', 'MLB World Series',
        'UEFA Champions League Final', 'NHL Stanley Cup Finals',
        'Wimbledon Men\'s Championship'],
        ['2005', 12.5, 98.7, 25.3, 0.6, 3.3, 2.8],
        ['2006', 13.0, 90.7, 17.1, 0.8, 2.8, 3.4],
        ['2007', 9.3, 93.0, 15.8, 0.9, 1.8, 3.8],
        ['2008', 14.9, 97.5, 17.1, 1.3, 4.4, 5.1],
        ['2009', 14.3, 98.7, 13.6, 2.1, 4.9, 5.7],
        ['2010', 18.2, 106.5, 19.4, 2.2, 5.2, 2.3],
        ['2011', 17.4, 111.0, 14.3, 4.2, 4.6, 2.7],
        ['2012', 16.8, 111.3, 16.6, 2.0, 2.9, 3.9],
        ['2013', 16.6, 108.7, 12.7, 1.4, 5.8, 2.5],
        ['2014', 15.7, 111.3, 15.0, 1.9, 4.7, 2.4]
      ];

      var primaryOptions = {
        title: 'Highest U.S. Viewership for Most Recent Event (in millions)',
        legend: 'none',
        tooltip: {isHtml: true} // This MUST be set to true for your chart to show.
      };

      var tooltipOptions = {
        title: 'U.S. Viewership Over The Last 10 Years (in millions)',
        legend: 'none'
      };

      // Draws your charts to pull the PNGs for your tooltips.
      function drawTooltipCharts() {

        var data = new google.visualization.arrayToDataTable(tooltipData);
        var view = new google.visualization.DataView(data);

        // For each row of primary data, draw a chart of its tooltip data.
        for (var i = 0; i < primaryData.length; i++) {

          // Set the view for each event's data
          view.setColumns([0, i + 1]);

          var hiddenDiv = document.getElementById('hidden_div');
          var tooltipChart = new google.visualization.LineChart(hiddenDiv);

          google.visualization.events.addListener(tooltipChart, 'ready', function() {

            // Get the PNG of the chart and set is as the src of an img tag.
            var tooltipImg = '<img src="' + tooltipChart.getImageURI() + '">';

            // Add the new tooltip image to your data rows.
            primaryData[i][2] = tooltipImg;

          });
          tooltipChart.draw(view, tooltipOptions);
        }
        drawPrimaryChart();
      }

      function drawPrimaryChart() {

        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Event');
        data.addColumn('number', 'Highest Recent Viewership');

        // Add a new column for your tooltips.
        data.addColumn({
          type: 'string',
          label: 'Tooltip Chart',
          role: 'tooltip',
          'p': {'html': true}
        });

        // Add your data (with the newly added tooltipImg).
        data.addRows(primaryData);

        var visibleDiv = document.getElementById('visible_div');
        var primaryChart = new google.visualization.ColumnChart(visibleDiv);
        primaryChart.draw(data, primaryOptions);

      }
    </script>
  </head>
<body>
<div id="hidden_div" style="display:none"></div>
<div id="visible_div" style="height:300px"></div>
</body>
</html>

도움말 작업

도움말에는 자바스크립트로 정의된 작업도 포함될 수 있습니다. 간단한 예로, 사용자가 '샘플 도서 보기'를 클릭하면 대화상자가 표시되는 작업이 포함된 도움말을 살펴보겠습니다.

tooltip 옵션은 사용자가 파이 웨지를 선택할 때 트리거되어 setAction에 정의된 코드가 실행되도록 합니다.

        google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['Genre', 'Percentage of my books'],
          ['Science Fiction', 217],
          ['General Science', 203],
          ['Computer Science', 175],
          ['History', 155],
          ['Economics/Political Science', 98],
          ['General Fiction', 72],
          ['Fantasy', 51],
          ['Law', 29]
        ]);

        var chart = new google.visualization.PieChart(
          document.getElementById('tooltip_action'));

        var options = { tooltip: { trigger: 'selection' }};

        chart.setAction({
          id: 'sample',
          text: 'See sample book',
          action: function() {
            selection = chart.getSelection();
            switch (selection[0].row) {
              case 0: alert('Ender\'s Game'); break;
              case 1: alert('Feynman Lectures on Physics'); break;
              case 2: alert('Numerical Recipes in JavaScript'); break;
              case 3: alert('Truman'); break;
              case 4: alert('Freakonomics'); break;
              case 5: alert('The Mezzanine'); break;
              case 6: alert('The Color of Magic'); break;
              case 7: alert('The Law of Superheroes'); break;
            }
          }
        });

        chart.draw(data, options);
      }

작업은 visible, enabled, 또는 둘 다일 수 있습니다. Google 차트가 렌더링되면 도움말 작업은 표시되는 경우에만 표시되고 사용 설정된 경우에만 클릭할 수 있습니다. (사용 중지되었지만 표시되는 작업은 회색으로 표시됨)

visibleenabled는 true 또는 false 값을 반환하는 함수여야 합니다. 이러한 함수는 요소 ID와 사용자 선택에 따라 다를 수 있으므로 작업 가시성과 클릭 가능 여부를 미세 조정할 수 있습니다.

focusselection에서 도움말이 트리거될 수 있습니다. 그러나 도움말 작업에는 selection를 사용하는 것이 좋습니다. 이렇게 하면 도움말이 유지되므로 사용자가 작업을 더 쉽게 선택할 수 있습니다.

물론 이 작업이 알림일 필요는 없습니다. 자바스크립트에서 할 수 있는 작업, 작업에서 할 수 있는 작업은 모두 가능합니다. 여기서는 두 가지 작업을 추가하겠습니다. 하나는 파이 차트의 웨지를 확대하는 작업과 다른 하나는 축소하는 작업입니다.

        google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['Genre', 'Percentage of my books'],
          ['Science Fiction', 217],
          ['General Science', 203],
          ['Computer Science', 175],
          ['History', 155],
          ['Economics & Political Science', 98],
          ['General Fiction', 72],
          ['Fantasy', 51],
          ['Law', 29]
        ]);

        var chart = new google.visualization.PieChart(
          document.getElementById('tooltip_action_2'));

        var options = { tooltip: { trigger: 'selection' }};

        chart.setAction({
          id: 'increase',
          text: 'Read 20 more books',
          action: function() {
            data.setCell(chart.getSelection()[0].row, 1,
                         data.getValue(chart.getSelection()[0].row, 1) + 20);
            chart.draw(data, options);
          }
        });

        chart.setAction({
          id: 'decrease',
          text: 'Read 20 fewer books',
          action: function() {
            data.setCell(chart.getSelection()[0].row, 1,
                         data.getValue(chart.getSelection()[0].row, 1) - 20);
            chart.draw(data, options);
          }
        });

        chart.draw(data, options);
      }

데이터 주석 달기

tooltip 대신 annotationText 열을 역할로 사용하여 Google 차트에 텍스트를 직접 오버레이할 수 있습니다. 주석으로 마우스를 가져가면 도움말을 볼 수 있습니다.

function drawChart() {
  var dataTable = new google.visualization.DataTable();
  dataTable.addColumn('string', 'Year');
  dataTable.addColumn('number', 'USA');
  dataTable.addColumn({type: 'string', role: 'annotation'});
  dataTable.addColumn({type: 'string', role: 'annotationText', p: {html:true}});
  dataTable.addColumn('number', 'China');
  dataTable.addColumn('number', 'UK');
  dataTable.addRows([
    ['2000',  94, '',  '', 58, 28],
    ['2004', 101, '',  '', 63, 30],
    ['2008', 110, 'An all time high!', '<img width=100px src="https://upload.wikimedia.org/wikipedia/en/a/a4/Flag_of_the_United_States.svg">', 100, 47],
    ['2012', 104, '',  '', 88, 65]
  ]);

  var options = { tooltip: {isHtml: true}};
  var chart = new google.visualization.LineChart(document.getElementById('tt_6_annotation'));
  chart.draw(dataTable, options);
}

지원되는 차트

현재 다음 차트 유형에서 HTML 도움말이 지원됩니다.

annotationText 또는 tooltip 역할을 사용 중인 경우 역할에 대한 문서에서 향후 변경사항 및 향후 발생할 수 있는 문제를 방지하는 방법을 알아보세요.