如何在Plotly离线模式下绘制垂直线?

13
如何在python中使用plotly离线绘制垂直线?我想在同一图中添加x=20、x=40和x=60处的线。
def graph_contracts(self):
    trace1 = go.Scatter(
        x=np.array(range(len(all_prices))),
        y=np.array(all_prices), mode='markers', marker=dict(size=10, color='rgba(152, 0, 0, .8)'))
    data = [trace1]
    layout = go.Layout(title='Market Contracts by Period',
                       xaxis=dict(title='Contract #',
                                  titlefont=dict(family='Courier New, monospace', size=18, color='#7f7f7f')),
                       yaxis=dict(title='Prices ($)',
                                  titlefont=dict(family='Courier New, monospace', size=18, color='#7f7f7f')))
    fig = go.Figure(data=data, layout=layout)
    py.offline.plot(fig)

生成的图表

4个回答

18

您可以通过在layout中添加shape来添加line,例如:

import plotly
plotly.offline.init_notebook_mode()
import random

x=[i for i in range(100)]
trace = plotly.graph_objs.Scatter(x=x,
                                  y=[random.random() for _ in x],
                                  mode='markers')
shapes = list()
for i in (20, 40, 60):
    shapes.append({'type': 'line',
                   'xref': 'x',
                   'yref': 'y',
                   'x0': i,
                   'y0': 0,
                   'x1': i,
                   'y1': 1})

layout = plotly.graph_objs.Layout(shapes=shapes)
fig = plotly.graph_objs.Figure(data=[trace],
                               layout=layout)
plotly.offline.plot(fig)

我会给你。

输入图像描述


8
你也可以使用 yref: 'paper',这将强制坐标相对于网格而不是相对于你的值进行计算。 - Maximilian Peters

6

2
我注意到,如果您尝试将annotation_text添加到日期轴的add_vline中,plotly会抛出错误:“不支持的操作数类型:+:'int'和'datetime.date'”。 - nanogoats

6

这是我的例子。最重要的指令就是这个。

fig.add_trace(go.Scatter(x=[12, 12], y=[-300,300], mode="lines", name="SIGNAL"))

最重要的属性是MODE='LINES'。

实际上,这个例子是关于一个x=12的线段。

例子:

    import pandas as pd
    import plotly.graph_objects as go
    import matplotlib.pyplot as plt
    import numpy as np
    import plotly.tools as tls




    df1 = pd.read_csv('./jnjw_f8.csv')



    layout = go.Layout(
    xaxis = go.layout.XAxis(
        tickmode = 'linear',
        tick0 = 1,
        dtick = 3
    ),
    yaxis = go.layout.YAxis(
        tickmode = 'linear',
        tick0 = -100,
        dtick = 3
    ))

    fig = go.Figure(layout = layout)

    fig.add_trace(go.Scatter(x = df1['x'], y = 
    df1['y1'],name='JNJW_sqrt'))
    fig.add_trace(go.Scatter(x=[12, 12], y=[-300,300], 
    mode="lines", name="SIGNAL"))


    fig.show()

这里也要看一下。 如何使用Plotly绘制竖直线


2
fig.add_vline(x=2.5, line_width=3, line_dash="dash", line_color="green")

6
社区鼓励在代码旁添加解释,而不是仅提供基于代码的答案(请参见此处)。 - costaparas
请查看此处:https://meta.stackoverflow.com/a/300846/10144278 - Yiğit Can Taşoğlu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接