【发布时间】:2020-08-15 13:33:40
【问题描述】:
我正在使用图表js来显示条形图。它在正常情况下正常工作,但我愿意更改标签的颜色或一小部分,即我想在条形图的标签上包含一些 HTML。但是,它不会呈现 HTML,而是显示纯 HTML 文本。
如果不可能,如果有其他方法可以实现这一点,我可以,改变价格的颜色并保持名称不变。
let $js_dom_array = ["43.28", "93.13"];
let $js_am_label_arr = ["<span>$0</span> None", "<span class='text-danger'>$23.63</span> Handicap Accessible"];
let ctx2 = document.getElementById("barChart").getContext("2d");
let chart = new Chart(ctx2, {
type: 'bar',
data: {
labels: $js_am_label_arr,
datasets: [{
label: 'Amenity Name',
data: $js_dom_array,
backgroundColor: 'rgba(26,179,148,0.5)',
borderColor: 'rgba(75, 192, 192, 1)',
borderWidth: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: true,
legendCallback: function(chart) {
var text = [];
for (var i=0; i<chart.data.datasets.length; i++) {
console.log(chart.data.datasets[i]); // see what's inside the obj.
text.push(chart.data.datasets[i].label);
}
return text.join("");
},
tooltips: {
"enabled": false
},
scales: {
xAxes: [{
stacked: false,
beginAtZero: true,
ticks: {
stepSize: 1,
min: 0,
autoSkip: false,
callback: function(label, index, labels) {
if (/\s/.test(label)) {
return label.split(" ");
}else{
return label;
}
}
}
}]
},
animation: {
duration: 0,
onProgress: function() {
var chartInstance = this.chart,
ctx = chartInstance.ctx;
ctx.font = Chart.helpers.fontString(16, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
ctx.textAlign = 'center';
ctx.textBaseline = 'bottom';
this.data.datasets.forEach(function(dataset, i) {
var meta = chartInstance.controller.getDatasetMeta(i);
meta.data.forEach(function(bar, index) {
if (dataset.data[index] > 0) {
let data = dataset.data[index];
ctx.fillText('$'+Math.round(data), bar._model.x, bar._model.y - 5);
}
});
});
}
},
}
});
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div>
<canvas id="barChart" height="140"></canvas>
</div>
#Note: 在这里,您可能会看到 $js_am_label_arr 中的数据已经是一个 HTML 元素,但是如果我可以从其中传递原始值数组和 HTML 中的转换,那么我可以传递原始值(没有)也是如此。
目前$js_am_label_arr 被创建为:
if($avg_amount < 0){
$text_color = 'text-danger';
$avg_amount_text = "<span class='text-danger'>$".abs($avg_amount)."</span>";
}else{
$text_color = '';
$avg_amount_text = "<span>$".abs($avg_amount)."</span>";
}
$am_label_arr[] = $avg_amount_text.' '.$fv['amenity_name'];
更新:
预期输出
因此,例如在上述情况下,如果值为负,则为-$23.63。在这种情况下,我希望标签为 ($23.63)[红色],后跟名称 Handicap Accessible。这也可以在结果中看到,添加了text-danger 类以将该部分显示为红色。
【问题讨论】:
-
this question can help you: Chart.js 标签中的 HTML
-
这能回答你的问题吗? HTML in Chart.js labels
-
@Viney 没有。相反,不仅仅是stackoverflow.com/questions/37005297/…,这看起来很接近,但我无法在我的情况下工作。
-
我明白了,看看here
-
@viney 我已经阅读了这些文件,您能否通过指出我所缺少的内容来提供一个有效的 jsfiddle 链接?我已经尝试过那个 legendCallback
标签: javascript jquery chart.js chartjs-2.6.0