如何使用highcharts/d3.js或任何其他图表库绘制直线加条形图?

如何使用highcharts/d3.js或任何其他图表库绘制直线加条形图?,d3.js,highcharts,nvd3.js,D3.js,Highcharts,Nvd3.js,如何使用highcharts/d3.js或任何其他图表库绘制下面的直线加条形图 因此,我正试图实现的是“如果特定时间间隔没有可用数据,则显示栏”(这里的图表表示时间间隔(17:30-18:30)没有可用数据)。您可以使用Highcharts/Highstock进行此操作。您可以将行和列系列放在一个图表中,并根据自己的喜好对它们进行操作 <script src="https://code.highcharts.com/stock/highstock.js"></script>

如何使用highcharts/d3.js或任何其他图表库绘制下面的直线加条形图


因此,我正试图实现的是“如果特定时间间隔没有可用数据,则显示栏”(这里的图表表示时间间隔(17:30-18:30)没有可用数据)。

您可以使用Highcharts/Highstock进行此操作。您可以将行和列系列放在一个图表中,并根据自己的喜好对它们进行操作

<script src="https://code.highcharts.com/stock/highstock.js"></script>
<div id="container" style="height: 400px; min-width: 600px"></div>

var数据=[];
for(设i=0;i<100;i++){
如果(i==10 | i==11 | i==12 | i==13 | i==14 | i==15 | i==16 | i==17 | i==18 | i==27 | i==28 | i==29){
data.push(空)
}否则{
数据推送([i,数学地板((数学随机()*100)+1)])
}
}
Highcharts.stockChart(‘容器’{
xAxis:{
序数:假,
标签:{
格式:“{value}”
}
},
系列:[{
数据:数据,
connectNulls:false,
数据分组:{
已启用:false
}
}, {
键入:“列”,
点宽度:9,
数据分组:{
已启用:false
},
数据:[
[10, 100],
[11, 100],
[12, 100],
[13, 100],
[14, 100],
[15, 100],
[16, 100],
[17, 100],
[18, 100],
[27, 100],
[28, 100],
[29, 100]
]
}]
});

查看此在线演示:

您可以使用Highcharts/Highstock进行此操作。您可以将行和列系列放在一个图表中,并根据自己的喜好对它们进行操作

<script src="https://code.highcharts.com/stock/highstock.js"></script>
<div id="container" style="height: 400px; min-width: 600px"></div>

var数据=[];
for(设i=0;i<100;i++){
如果(i==10 | i==11 | i==12 | i==13 | i==14 | i==15 | i==16 | i==17 | i==18 | i==27 | i==28 | i==29){
data.push(空)
}否则{
数据推送([i,数学地板((数学随机()*100)+1)])
}
}
Highcharts.stockChart(‘容器’{
xAxis:{
序数:假,
标签:{
格式:“{value}”
}
},
系列:[{
数据:数据,
connectNulls:false,
数据分组:{
已启用:false
}
}, {
键入:“列”,
点宽度:9,
数据分组:{
已启用:false
},
数据:[
[10, 100],
[11, 100],
[12, 100],
[13, 100],
[14, 100],
[15, 100],
[16, 100],
[17, 100],
[18, 100],
[27, 100],
[28, 100],
[29, 100]
]
}]
});

请参阅此在线演示:

您还可以使用Highcharts和
绘图带功能(应该更具弹性)。在
chart.events.load
上实现了一种算法,该算法检查
null
是否在
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
        })
      }
    }
  }
现场示例:

API参考


您还可以使用具有
绘图带功能的Highcharts(应更具弹性)。在
chart.events.load
上实现了一种算法,该算法检查
null
是否在
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
        })
      }
    }
  }
现场示例:

API参考


您如何检测是否存在数据点?@rioV8:要么我们不会发送该特定时间间隔的数据,要么让我们为该时间间隔输入json所说的内容type:bar。所以简单的问题是:*在同一个图表中显示某个时间间隔的行和某个时间间隔的显示栏。““您如何检测是否存在数据点?”@rioV8:要么我们不会发送该特定时间间隔的数据,要么让我们为该时间间隔输入json所说的:bar。所以简单的问题是:*在同一个图表中显示某个时间间隔的行和某个时间间隔的显示栏。“”