В настоящее время у меня есть гистограмма с двумя результатами, сравнивающими друг с другом с использованием chart.js на Rails 5. Как показано на первом рисунке.
Он показывает текущий балл на левом баре и полный балл на правом баре.
Но у меня появилась просьба о том, чтобы на гистограммах были объединены и показаны легенды для текущего счета и полного балла.
Был поиск вокруг, но он просто нашел штабелированную гистограмму. Можно ли объединить 2 бара вместе?
Я нашел решение. Для Chart.js 2.1.x и далее (он не работает Chart.js 1.xx), вы можете применить набор данных с настраиваемой опцией, как показано ниже:
var options = {
scales:{
xAxes: [{ stacked: true }],
yAxes: [{ stacked: true }]
}
};
var myBarChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
Я использую диаграмму js 2.2.1 gem из этого источника. Вспомогательный метод из строки 3-35 дает представление о том, как создать сложную гистограмму. Так или иначе, у него нет возможности вводить данные из данного метода. Поэтому переопределите вспомогательный метод:
def chart2_bar id=nil, size=nil, data={}, options={}
html = "<canvas id=\"myChart_bar\" width=\"#{size[:width]}px\" height=\"#{size[:height]}px\"></canvas>".html_safe
script = javascript_tag do
<<-END.html_safe
var ctx = document.getElementById("myChart_bar");
var data = "#{data.to_json}";
var options = "#{options.to_json}";
var myBarChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
END
end
return html + script
end
Данные должны быть в формате json, иначе они будут обрабатываться как строковый формат и, следовательно, ошибка. Вы можете создать переменную экземпляра и перейти в вспомогательный метод, как обычно.
Не сказал бы, что это идеальное решение, но оно отлично работает от генерации html, а также pdf (с использованием wicked-pdf).