Добавление аннотаций на график Google Candlestick

Я использую график свечей Google Charts, перевернутый вбок, чтобы эмулировать линейчатую диаграмму диапазона. Что касается текста, который в данный момент отображается в крайнем левом ряду (TU300, TU-01, TU-10 и т. Д.) - я бы хотел, чтобы он также отображался (или вместо этого) сразу справа от каждой горизонтальной полосы, так что он помечает каждую полосу более эффективно.

Я новичок, и был бы признателен за подробную помощь. Вот JSFiddle:

https://jsfiddle.net/jdscomms/xLe83g80/

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

  google.charts.setOnLoadCallback(drawChart);

  function drawChart() {

    var data = new google.visualization.arrayToDataTable([
      ['TU300', 438, 438, 447, 447],
      ['TU-01', null, null, null, null],
      ['TU-10', 436, 436, 445, 445],
      ['TU-12EX', 438, 438, 445, 445],
      ['TU-2', 438, 438, 445, 445],
          ['TU-3', 436, 436, 445, 445],
      ['TU-3s', 436, 436, 445, 445],
      [' TU-3w', 436, 436, 445, 445],         
      ['NS Micro', 435, 435, 445, 445],
      ['NS Micro II', 410, 410, 480, 480],
      ['Universal II ', 435, 435, 445, 445],                      
    ], true);

    var options = {
      title: 'Calibration range',
            orientation: 'vertical', // Orients this chart horizontally
                backgroundColor: '#eaeaea',
         hAxis: { 
        title: 'Hz',
        minValue: 300,
            maxValue: 600,
          gridlines: { color: '#999', count: 21 },
            minorGridlines: { color: '#e1e1e1', count: 4 },
    },

    vAxis: {
      title: 'Models',
    },

      bar: { groupWidth: '80%' }, // Space between bars
      candlestick: {
        fallingColor: { strokeWidth: 0, fill: '#a52714' }, // red
        risingColor: { strokeWidth: 0, fill: '#0f9d58' }   // green
      }
    };

    var chart = new google.visualization.CandlestickChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }

2 ответа

Вы всегда можете вручную расширить подсвечник, который, кажется, не поддерживает аннотации в их API с некоторыми старыми добрыми JavaScript и CSS.

Соберите все палочки, определите их положение и ширину с помощью API getBoundingClientRect и добавьте абсолютные дивы к диаграмме с соответствующими позициями в зависимости от пометки, которую они комментируют.

var bars = document.querySelectorAll('#chart_div svg > g:nth-child(5) > g')[0].lastChild.children
for (var i = 0 ; i < bars.length ; i++) {
  var bar = bars[i]
  var { top, left, width } = bar.getBoundingClientRect()
  var hint = document.createElement('div')
  hint.style.top = top + 'px'
  hint.style.left = left + width + 5 + 'px'
  hint.classList.add('hint')
  hint.innerText = rawData.filter(t => t[1])[i][0]
  document.getElementById('chart_div').append(hint)
}

Я сделал рабочий JsFiddle, вы можете проверить здесь. Вы можете отключить vAxis учитывая, что это немного повторяется сейчас.

Google Candlestick Chart API не дает вам возможности маркировать свечи (макс, открытие мин / макс, мин, закрытие мин / макс) напрямую. Однако, похоже, есть способы сделать то же самое для гистограмм.
Вот как они маркируют столбцы на гистограммах с помощью setColumns.

var view = new google.visualization.DataView(data); view.setColumns([0, 1, { calc: "stringify", sourceColumn: 1, type: "string", role: "annotation" }]);

Наложения могут дать обходной путь, например, жесткое кодирование ваших этикеток с большим трудом.

Другие вопросы по тегам