如何在可绘制的python中的所有子图中添加水平线

时间:2018-08-21 12:14:26

标签: python plotly

我想在我绘制的每个子图中的0.09 and -0.09处添加一条水平线。以下是我的代码。

  trace1 = go.Scatter(
    x=df1['transaction_date'],
    y=df1['difference'],
    )
  trace2 = go.Scatter(
    x=df2['transaction_date'],
    y=df2['difference'],
)

 trace3 = go.Scatter(
   x=df3['transaction_date'],
   y=df3['difference'],

 )
 trace4 = go.Scatter(
   x=df4['transaction_date'],
   y=df4['difference'],

 )

 fig = tools.make_subplots(rows=2, cols=2,subplot_titles=('DF1 HS', DF2 HSD',
                                                     'DF3 HD', 'DF4 SD',
                                                     ))

 fig.append_trace(trace1, 1, 1)
 fig.append_trace(trace2, 1, 2)
 fig.append_trace(trace3, 2, 1) 
 fig.append_trace(trace4, 2, 2)

然后我要将这4个子图保存为jpeg在磁盘上。如何在python中做到这一点

3 个答案:

答案 0 :(得分:1)

尝试使用SUBJECT A_S_values A_C_values F_S_values F_C_values Te_S_values Te_C_values To_S_values To_C_values 5 0.96 1.00 0.92 0.93 0.85 0.71 0.88 1.00 6 0.96 1.00 0.92 0.71 1.00 1.00 0.69 0.86 7 1.00 1.00 0.88 0.93 0.85 1.00 0.62 0.93 更新layout对象的fig,如下所示:

shapes

该图将另存为import plotly.graph_objs as go from plotly import tools from plotly.offline import init_notebook_mode, plot df = pd.DataFrame(np.random.randint(0,100,size=(20,2)), index=pd.date_range(start='2018-08-21',end='2018-09-09'), columns=['A','B']) trace1 = go.Scatter(x=df.index,y=df['A'],) trace2 = go.Scatter(x=df.index,y=df['B'],) fig = tools.make_subplots(rows=2, cols=1,subplot_titles=(['A','B'])) fig.append_trace(trace1, 1, 1) fig.append_trace(trace2, 2, 1) fig['layout'].update(shapes=[{'type': 'line','y0':50,'y1': 50,'x0':str(df.index[0]), 'x1':str(df.index[-1]),'xref':'x1','yref':'y1', 'line': {'color': 'red','width': 2.5}}, {'type': 'line','y0':50,'y1': 50,'x0':str(df.index[0]), 'x1':str(df.index[-1]),'xref':'x2','yref':'y2', 'line': {'color': 'red','width': 2.5}}]) plot(fig,show_link=False,image='jpeg',image_filename='Temp_plot') 。查看下面的图片。Saved plot

该方法的缺点是我们需要仔细地将Temp_plot.jpegxref的轴值指定给子图。

答案 1 :(得分:1)

您提到您可以使用matplotlib解决方案:

数据:

dict = {
    "a":np.random.randint(low=-10,high=10,size=20),
    "b":np.random.randint(low=-10,high=10,size=20),
    "c":np.random.randint(low=-10,high=10,size=20),
    "d":np.random.randint(low=-10,high=10,size=20),
}

df = pd.DataFrame(dict)

情节:

fig, axes = plt.subplots(2,2, figsize=(20,10), sharex=True, sharey=True)
for i,j in zip(axes.ravel(), list(df)):
    i.plot(df.index, df[j], 'ro')
    i.hlines(y=-3, xmin=0, xmax=22)
    i.hlines(y=3, xmin=0, xmax=22)

fig.savefig("testplot.png")

结果:

enter image description here

答案 2 :(得分:0)

我对 Plotly 还很陌生,所以可能 API 刚刚更新,但似乎有一个更简单的解决方案,根据 documentation here。只需要使用 fig.add_hline() 语法,同时指定应该在哪个子图(列和行)上绘制,例如:

fig.add_hline(y=1, line_dash="dot", row=1, col=1, line_color="#000000", line_width=2)

这条线将指示 Plotly 在位于 y = 1 的子图上绘制一条水平线 row = 1col = 1

或者,如 dox 中所述,“all”关键字可以作为 rowcol 参数的值传递,以指示 plotly 在其上绘制线(等待它。 ..) 所有子图!