作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个 chart.js 插件来创建瀑布图。
我是使用 chart.js 的新手。我正在考虑扩展条形图以创建瀑布图。
条形图 Controller 中的draw函数如下:
draw: function(ease) {
var me = this;
var easingDecimal = ease || 1;
helpers.each(me.getMeta().data, function(rectangle, index) {
var d = me.getDataset().data[index];
if (d !== null && d !== undefined && !isNaN(d)) {
rectangle.transition(easingDecimal).draw();
}
}, me);
},
最佳答案
自 Chart.js v2.9.0. ,我们可以使用 floating bars轻松创建瀑布图。可以使用语法 [min, max]
指定单个柱线。 .
给定一组值 [3, 5, 4, 2, 6]
,我们需要生成以下数据(最后一个条目是“总计”柱的计算值):
[[0, 3], [3, 8], [8, 12], [12, 14], [14, 20], 20]
tooltips.callback
计算要在工具提示中显示的正确值的函数。
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const v = data.datasets[0].data[tooltipItem.index];
return Array.isArray(v) ? v[1] - v[0] : v;
}
}
},
baseData
中生成瀑布图。大批。
let baseData = [
{ label: 'A', value: 3 },
{ label: 'B', value: 5 },
{ label: 'C', value: 4 },
{ label: 'D', value: 2 },
{ label: 'E', value: 6 }
];
const labels = baseData.map(o => o.label).concat('Total');
const data = [];
let total = 0;
for (let i = 0; i < baseData.length; i++) {
const vStart = total;
total += baseData[i].value;
data.push([vStart, total]);
}
data.push(total);
const backgroundColors = data.map((o, i) => 'rgba(255, 99, 132, ' + (i + (11 - data.length)) * 0.1 + ')');
new Chart('waterfall', {
type: 'bar',
data: {
labels: labels,
datasets: [{
data: data,
backgroundColor: backgroundColors,
barPercentage: 1
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
legend: {
display: false
},
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
const v = data.datasets[0].data[tooltipItem.index];
return Array.isArray(v) ? v[1] - v[0] : v;
}
}
},
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="waterfall" height="200"></canvas>
If the chart should start with the 'Total' bar, simply
reverse
labels
,data
andbackgroundColors
arrays as follows.
data: {
labels: labels.reverse(),
datasets: [{
data: data.reverse(),
backgroundColor: backgroundColors.reverse(),
...
关于charts - 用于制作瀑布图的 chart.js 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38703114/
我正在为我的网格样式显示使用 jQuery 瀑布。 为了解决常见的图像重叠问题,我将瀑布方法包装在 .load() 函数中,例如: $(window).load(function(){ $('#b
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
对于瀑布图,如果设置为 isSum() ,是否有办法覆盖列标签上显示的值,不幸的是,每列传递的值都会四舍五入,因此会出现当最后一列设置为 isSum() 时,与 Excel 数据相比存在差异。 最佳答
我是一名优秀的程序员,十分优秀!