javascript - ChartJs:HorizontalBar 缺少背景颜色
问题描述
我有以下使用 ChartJs 2.7.3 的图表,它应该在红色条中显示 10 年的跨度。由于某种原因,该栏的背景没有正确应用(如果您悬停图表,您仍然会得到正确的悬停工具提示)
$(() => {
var ctx = $("#Chart")[0];
var chart = new Chart(ctx, {
type: 'horizontalBar',
data: {
labels: ['ABC'],
datasets: [{
label: 'ABC',
data: [{
t: '2015-3-15',
y: 10
}],
backgroundColor: 'rgba(255,0,0,1)'
}]
},
options: {
scales: {
xAxes: [{
type: 'time',
time: {
min: '2010-1-01',
max: '2030-1-01'
}
}]
}
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></script>
<canvas id="Chart" height="50"></canvas>
如果我将图表类型从 a 切换horizontalBar
到 normal bar
,那么它会按预期工作:
$(() => {
var ctx = $("#Chart")[0];
var chart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['ABC'],
datasets: [{
label: 'ABC',
data: [{
t: '2015-3-15',
y: 10
}],
backgroundColor: 'rgba(255,0,0,1)'
}]
},
options: {
scales: {
xAxes: [{
type: 'time',
time: {
min: '2010-1-01',
max: '2030-1-01'
}
}]
}
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></script>
<canvas id="Chart" height="50"></canvas>
水平条形图缺少什么?
解决方案
我不知道为什么您的代码不起作用,但可以提出一种不同的方法来解决问题。
请在下面查看您修改后的代码。为了摆脱恼人的 JavaScript 警告,我使用了最新的稳定版 Chart.js (2.3.0)。
我包括了两个条,因为我希望数据可以是动态大小的。然而,它也应该适用于单个酒吧。但是我不知道如何处理该
y
值,这取决于您的用例。
$(() => {
var data = [{
l: 'ABC',
t: '2015-3-15',
y: 10
}, {
l: 'XYZ',
t: '2020-11-05',
y: 20
}];
var ctx = $("#Chart")[0];
var chart = new Chart(ctx, {
type: 'horizontalBar',
data: {
yLabels: data.map(o => o.l),
datasets: [{
label: 'ABC',
data: data.map(o => moment(o.t, 'YYYY-M-DD')),
backgroundColor: ['rgba(255,0,0, 0.5)', 'rgba(0,255,0,0.5)']
}]
},
options: {
legend: {
display: false
},
scales: {
xAxes: [{
type: 'time',
time: {
parser: 'YYYY-M-DD',
unit: 'year',
tooltipFormat: 'YYYY/M/D'
},
ticks: {
min: '2010-1-01',
max: '2030-1-01'
}
}]
}
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<canvas id="Chart" height="80"></canvas>
推荐阅读
- javascript - 映射对象内部存在的数组仅在条件语句中给出时才起作用
- package - 有什么方法可以从另一个仓库导入一个特定的 lerna 包
- powershell - 使用 .CSV 文件添加 DNS 服务器条目
- amazon-ec2 - EC2 使用 Centos 8 AMI 官方无法扩展 EBS 卷
- python - 将字节数组转换为 Ctype 结构值
- javascript - 在 Laravel 上使用 Jquery 和 Ajax 检查单选按钮时填充的下拉列表
- javascript - 如何解决正则表达式中的易受攻击问题
- python - seaborn:我怎么能告诉它一个分类变量有一个特定的颜色?
- amazon-web-services - Terraform .12 是否可以将标签添加到现有 RDS
- java - JAVA:合并多个属性文件