2017-02-23 97 views
1

我的要求是使用Plotly.js在X轴的特定日期绘制垂直线。我是情节新手,我设法找到一个选项,使用“形状”选项绘制垂直线。使用Plotly.js的自定义垂直线

shapes:[{ 
       type: 'line', 
       x0: '2000-01-11', 
         y0:0, 
       x1: '2000-01-11', 
         y1:7,  
       line: { 
        color: 'grey', 
        width: 1.5, 
        dash:'dot' 
       } 
      }] 

但我面临的主要困难是如何定义的Y轴值绘制垂直线时,为Y轴刻度会有所不同基于数据。我希望它是动态的像y0:0; y1:(height-margin.top-margin.bottom)在我们用来绘制垂直线的d3中。

请帮助和代码是在这里 http://codepen.io/anon/pen/VpwWmV?editors=0010#0

回答

2

有一对夫妇的可能性,这可能为你工作:

  • 使用yref: paper成为独立的Y轴比例的(所有值都归一化为0到1之间)
  • 总是画到max imum和min imum y值

    y1: Math.min(...trace1.y), 
    
  • 采取相应的x值

    y1: trace1.y[trace1.x.indexOf('2000-01-02')], 
    

所有3种方法如下实现的y值。

var trace1 = { 
 
    x: ['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04', '2000-01-05', '2000-01-06', '2000-01-07', '2000-01-08', '2000-01-09', '2000-01-10', '2000-01-11', '2000-01-12', '2000-01-13', '2000-01-14', '2000-01-15', '2000-01-16', '2000-01-17', '2000-01-18', '2000-01-19', '2000-01-20', '2000-01-21', '2000-01-22', '2000-01-23', '2000-01-24', '2000-01-25', '2000-01-26', '2000-01-27', '2000-01-28', '2000-01-29', '2000-01-30', '2000-01-31'], 
 
    y: [4.3, 8.2, 4.1, 5.6, -3, -0.2, 0.3, 0.4, 4.1, 5, 4.6, -0.2, -8.5, -9.1, -2.7, -2.7, -17, -11.3, -5.5, -6.5, -16.9, -12, -6.1, -6.6, -7.9, -10.8, -14.8, -11, -4.4, -1.3, -1.1], 
 
    mode: 'lines', 
 
    type: 'scatter', 
 
    name: '2000' 
 
}; 
 

 
var data = [trace1]; 
 

 
var layout = { 
 
    xaxis: { 
 
    type: 'date', 
 
    title: 'January Weather' 
 
    }, 
 
    yaxis: { 
 
    title: 'Daily Mean Temperature' 
 
    }, 
 
    shapes: [{ 
 
    type: 'line', 
 
    x0: '2000-01-11', 
 
    y0: 0, 
 
    x1: '2000-01-11', 
 
    yref: 'paper', 
 
    y1: 1, 
 
    line: { 
 
     color: 'grey', 
 
     width: 1.5, 
 
     dash: 'dot' 
 
    } 
 
    }, { 
 
    type: 'line', 
 
    x0: '2000-01-17', 
 
    y0: 0, 
 
    x1: '2000-01-17', 
 
    y1: Math.min(...trace1.y), 
 
    line: { 
 
     color: 'grey', 
 
     width: 1.5, 
 
     dash: 'dot' 
 
    } 
 
    }, { 
 
    type: 'line', 
 
    x0: '2000-01-02', 
 
    y0: 0, 
 
    x1: '2000-01-02', 
 
    y1: trace1.y[trace1.x.indexOf('2000-01-02')], 
 
    line: { 
 
     color: 'grey', 
 
     width: 1.5, 
 
     dash: 'dot' 
 
    } 
 
    }], 
 
    title: '2000 Toronto January Weather' 
 
}; 
 

 
Plotly.plot('myDiv', data, layout);
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script> 
 

 
<div id="myDiv" style="width:100%;height:400px;"></div>

+0

非常感谢。以上解决方案完美地按照我们的方式工作 – NewBie