我想突出顯示使用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;}) ' 也許我有一個概念問題 –