我想突出显示使用nvd3.js eventLineChart建模的时间序列中的某些点 - 更确切地说,我有一个带有时间戳和每个时间戳的json对象喜欢在此特定日期/时间添加垂直线。突出显示的点可能不存在于时间序列数据源中,并且在所有时间序列数据组(如蜱)中都是全局的。NVD3.js在时间序列中突出显示时间戳
关于如何实现这一点的任何想法? - 我尝试在我的情节中添加一条标准线(根据我想要突出显示的事件的时间戳固定y1和y2和x),但无法将时间戳缩放到与原始时间序列相同的范围。
下面是我开始为此目的建立的模型的一些部分,其基于nv.models.lineChart。 - (只是一个模型,因为大多数代码的摘录距离线型图模型副本):
nv.models.eventLineChart = function() {
// adds vertical highlights to line chart
"use strict";
var chartEvents = {}
function chart(selection) {
selection.each(function(data) {
// Setup Scales
x = lines.xScale();
y = lines.yScale();
// Setup containers and skeleton of chart
var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-lineChart').append('g');
var g = wrap.select('g');
gEnter.append('g').attr('class', 'nv-eventLinesWrap');
//------------------------------------------------------------
// Main Chart Component(s)
var eventWrap = wrap
.select('.nv-eventLinesWrap')
.selectAll('.nv-eventLines')
.data(function(d) {return d });
eventWrap
.enter()
.append('g')
.attr('class', 'nv-eventLines');
// chartEvents json ==> [{decsription: "test,"timestamp: 1375031820000}]
var eventLine = eventWrap
.selectAll('.nv-eventLine')
.data(chartEvents, function(d){return (d.timestamp)});
var eventLineEnter = eventLine.enter()
.append('line').attr('class', 'nv-eventLine')
.style('stroke-opacity', 0);
// @todo set ymin and ymax
eventLine
.attr('x1', function(d){ return x(d.timestamp);})
.attr('x2', function(d){ return x(d.timestamp);})
.attr('y1', 300)
.attr('y2', 800)
.style('stroke', function(d,i,j) { return color(d,j) })
.style('stroke-opacity', function(d,i) {
return 1;
});
});
return chart;
}
chart.setChartEvents = function(_) {
if (!arguments.length) return chartEvents;
chartEvents = _;
return chart;
};
return chart;}
这种模式被称为使用:
nv.addGraph(function() {
var nv3dChart = nv.models.eventLineChart().useInteractiveGuideline(true).setChartEvents(json.chartEvents);
// json.chartEvents >> [{decsription: "EventDescription,"timestamp: 1375031820000}]
nv3dChart.xAxis
.showMaxMin(false);
.tickFormat(function(d) { return d3.time.format("%Y-%m-%d")(new Date(d)) });
nv3dChart.yAxis
.axisLabel(widgetConfig.action.data.kpiName)
.tickFormat(d3.format(',.f'));
var ndg = d3.select(renderToElementId+' svg');
ndg.datum([{
values: json.data,
key: widgetConfig.action.data.tagName
}])
.transition().duration(500);
nv.utils.windowResize(nv3dChart.update);
return nv3dChart;})
目前将会产生这个SVG输出(应该仅由垂直线被显示的事件)
<g class="nv-eventLines">
<line class="nv-eventLine" x1="1375031820000" x2="1375031820000" y1="300" y2="800" style="stroke: #1f77b4;"></line>
</g>
..如所描述的,我还没有想出根据林的规模的方式来实现的事件x值的缩放比例E视力表
将不胜感激关于这个问题
您应该可以通过调用'chart.xScale()'来获得用于图表的比例。 –
好吧,你真的必须告诉我们的代码,然后:) –
非常感谢您的及时答复...我尝试过使用chart.xscale已经但没有成功 - 我创建了一个nvd3模块为此目的,并设置行与 ' var eventLine = eventWrap.selectAll('。nv-eventLine')。data(chartEvents,function(d){return(d.timestamp)}); VAR eventLineEnter = eventLine.enter() .append( '线')ATTR( '类', 'NV-eventLine') eventLine .attr( 'X1',函数(d){返回d.timestamp。 }) .attr('x2',function(d){return d.timestamp;}) ' 也许我有一个概念问题 –