首页 文章

使用Plotly.js自定义垂直线

提问于
浏览
4

我的要求是使用Plotly.js在X轴的某些日期绘制垂直线 . 我是情节新手,我设法找到一个使用'Shapes'选项绘制垂直线的选项 .

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;我们用来画垂直线的d3中的y1:(height-margin.top-margin.bottom) .

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

1 回答

  • 4

    有几种可能适合您的可能性:

    • 使用 yref: paper 独立于y轴刻度(所有值都标准化为0到1之间)

    • 始终绘制到 max imum resp . min imum y-value

    y1: Math.min(...trace1.y),
    
    • 取相应x值的y值
    y1: trace1.y[trace1.x.indexOf('2000-01-02')],
    

    所有3种方式都在下面实现 .

    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>
    

相关问题