d3.js - 如何使用 highcharts/d3.js 或任何其他图表库绘制线加条形图?
问题描述
如何使用 highcharts/d3.js 或任何其他图表库绘制如下线加条形图?
所以我到底想要实现的是“如果特定时间间隔没有可用数据,则显示栏”(这里的图表显示时间间隔(17:30-18:30)没有可用数据)。
解决方案
您也可以使用具有plotBands
功能的 Highcharts(应该更有弹性)。实现了一种算法,chart.events.load
用于检查null
s 是否在 中data
,并根据您当前的数据动态地将绘图带添加到您的图表中。看看这段代码:
load() {
var axis = this.xAxis[0]
var boundaries = []
var color = '#55f'
// Check there are nulls in data. If yes, save the boundaries.
data.forEach((elem, i) => {
if (elem === null) {
if (data[i-1]) { boundaries.push(data[i-1][0]) }
if (data[i+1]) { boundaries.push(data[i+1][0]) }
}
})
// Create plotBands basing on current boundaries.
boundaries.forEach((range, i) => {
if (i % 2) {
axis.addPlotBand({
from: boundaries[i-1],
to: range,
color: color
})
}
})
}
此外,您可以在图表中添加另一个系列(假的,带有空数据),这将用于切换绘图带的可见性。这是代码:
{
// Fake series to add toggling visibility of plotbands functionality.
name: "Zone of Unavailability",
data: [],
events: {
legendItemClick() {
var bandsGroup = this.chart.xAxis[0].plotLinesAndBandsGroups['bands-0']
var bandsVisibility = bandsGroup.attr('opacity')
bandsGroup.attr({
opacity: bandsVisibility ? 0 : 1
})
}
}
}
现场示例:http: //jsfiddle.net/dzj8bwLm/
API参考:
https://api.highcharts.com/highcharts/xAxis.plotBands https://api.highcharts.com/highcharts/series.line.events.legendItemClick
推荐阅读
- angular - 如何从动态表单项中获取价值
- pytorch - 4 个维度上的张量均值
- r - 相交线和轮廓的循环坐标 - R
- xslt - XSLT 的苦恼,还是 XPath、text() 和 sum() 的乐趣,三幕中的悲剧
- python-3.x - 在以下行中: formatter.headings(columns) 我不明白为什么使用标题而其他标题放在类中而不使用
- r - 数据框中集群所有行的条件子集
- javascript - 在Javascript中将字符串转换为字节字符串
- python - 为什么导入在 __init__ 文件中定义后不起作用
- python - 尝试从另一个仓库(在 VSCode 中)导入 Python 模块
- java - 有没有办法使用带有服务帐户的谷歌电子表格 API 而没有 json 文件在 java 中进行身份验证?