NVD3 累积折线图:如何为特定的 X 轴设置不同的背景颜色
NVD3 Cumulative Line Chart : How to set different back ground color for specific X axis
我正在使用 NVD3 累积折线图,它非常适合我,但我想设置不同的背景颜色以突出显示 X 轴上的某些特定时间,如下图所示。
或为特定部分的图表设置不同的背景
如上图,我想为特定时间段设置不同的X轴颜色。
所以告诉我任何可能的方法来做到这一点或任何可能的方法来满足这个要求。
提前致谢。
所以,这里有相当大的 hack,但您可以解析出轴的位置并自己添加它:
var startTick = 1,
endTick = 3;
var x1 = parseFloat(d3.select(d3.selectAll('.nv-x .tick')[0][startTick]).attr('transform').split("(")[1]);
var x2 = parseFloat(d3.select(d3.selectAll('.nv-x .tick')[0][endTick]).attr('transform').split("(")[1]);
d3.select('.nv-y .tick')
.append('line')
.attr('x1', x1)
.attr('x2', x2)
.style('stroke', 'black')
.style('stroke-width', 10);
编辑
我刚刚重新考虑了这个。您可以从图表对象中取回它,而不是从 DOM 中解析位置。这样更干净:
var x1 = chart.xScale()(1122782400000);
var x2 = chart.xScale()(1251691200000);
var height = chart.yAxis.range()[0];
// line on x-axis
d3.select('.nv-y .tick')
.append('line')
.attr('x1', x1)
.attr('x2', x2)
.style('stroke', 'black')
.style('stroke-width', 10);
// shaded background
d3.select('.nv-y')
.append('rect')
.attr('x', x1)
.attr('width', x2 - x1)
.style('fill', 'steelblue')
.style('opacity', 0.2)
.attr('y', 0)
.attr('height', height);
例子here.
我正在使用 NVD3 累积折线图,它非常适合我,但我想设置不同的背景颜色以突出显示 X 轴上的某些特定时间,如下图所示。
或为特定部分的图表设置不同的背景
所以告诉我任何可能的方法来做到这一点或任何可能的方法来满足这个要求。
提前致谢。
所以,这里有相当大的 hack,但您可以解析出轴的位置并自己添加它:
var startTick = 1,
endTick = 3;
var x1 = parseFloat(d3.select(d3.selectAll('.nv-x .tick')[0][startTick]).attr('transform').split("(")[1]);
var x2 = parseFloat(d3.select(d3.selectAll('.nv-x .tick')[0][endTick]).attr('transform').split("(")[1]);
d3.select('.nv-y .tick')
.append('line')
.attr('x1', x1)
.attr('x2', x2)
.style('stroke', 'black')
.style('stroke-width', 10);
编辑
我刚刚重新考虑了这个。您可以从图表对象中取回它,而不是从 DOM 中解析位置。这样更干净:
var x1 = chart.xScale()(1122782400000);
var x2 = chart.xScale()(1251691200000);
var height = chart.yAxis.range()[0];
// line on x-axis
d3.select('.nv-y .tick')
.append('line')
.attr('x1', x1)
.attr('x2', x2)
.style('stroke', 'black')
.style('stroke-width', 10);
// shaded background
d3.select('.nv-y')
.append('rect')
.attr('x', x1)
.attr('width', x2 - x1)
.style('fill', 'steelblue')
.style('opacity', 0.2)
.attr('y', 0)
.attr('height', height);
例子here.