我使用以下代码制作了折线图,并尝试在y = 1处添加一条水平线。我尝试按照情节站点上的说明进行操作,但仍未显示。有人知道为什么吗?
date = can_tot_df.date
growth_factor = can_tot_df.growth_factor
trace0 = go.Scatter(
x=date,
y=growth_factor,
mode = 'lines',
name = 'growth_factor'
)
fig = go.Figure()
fig.add_shape(
type='line',
x0=date.min(),
y0=1,
x1=date.max(),
y1=1,
line=dict(
color='Red',
)
)
data = [trace0]
iplot(data)
答案 0 :(得分:2)
如果没有数据样本,很难准确地告诉我们出了什么问题。
我可以肯定地说的是,您缺少参数xref
和yref
来指定以y
和{ {1}}轴。从示例代码来看,这是您要执行的操作,因为您是根据日期指定x值的。
此外,您不需要担心x
对于新版的plotly。您只需运行iplot
就可以轻松显示图表。下面的图形和代码示例将向您展示如何使用fig.show()
以及如何以轴单位来定义线。
情节:
代码:
fig.show()
import plotly.graph_objects as go
import numpy as np
x = np.arange(10)
fig = go.Figure(data=go.Scatter(x=x, y=x**2))
fig.add_shape(type='line',
x0=0,
y0=40,
x1=8,
y1=40,
line=dict(color='Red',),
xref='x',
yref='y'
)
fig.show()
是xref='x'
的替代方法。现在,您可以将xref='paper'
指定为x0
和0
之间的从绘图开始和结束开始的浮点数。
答案 1 :(得分:1)
您要将行添加到fig
对象中,但是fig
并没有传递给iplot()
函数,只有data
传递给了。因此,仅绘制轨迹。
如果您使用的是plotly的较新版本,则新语法允许您仅使用fig
对象创建此图,例如:
from plotly import graph_objects as go
fig = go.Figure()
# Contrived dataset for example.
x = [1, 2, 3, 4]
y = [i**2 for i in x]
fig.add_trace(go.Scatter(
x=x,
y=y,
mode = 'lines',
name = 'growth_factor'))
fig.add_shape(type='line',
x0=min(x),
y0=5,
x1=max(x),
y1=5,
line=dict(color='Red'))
fig.update_shapes(dict(xref='x', yref='y'))
fig.show()
为方便起见,这里是plotly文档。
答案 2 :(得分:0)
df = df
fig = px.scatter(df, x="date", y="growth_factor", mode = 'lines',
hover_name=df['growth_factor'] )
fig.update_layout(shapes=[
dict(
type= 'line',
yref= 'y', y0= 1, y1= 1, # adding a horizontal line at Y = 1
xref= 'paper', x0= 0, x1= 1
)
])
fig.show()
答案 3 :(得分:0)
如果您使用子图,那么这是我发现的将另一行添加到子图的最简单方法。此示例在 y=80 处为所有 x 值绘制一条水平线
from plotly.subplots import make_subplots
fig = make_subplots(rows=2, cols=1,
shared_xaxes=True,
vertical_spacing=0.02)
[some graph]
fig.add_trace(go.Scatter(
name='Y=80',
x = [df['date'].min(), df['date'].max()],
y = [80, 80],
mode = "lines",
marker = dict(color = 'rgba(80, 26, 80, 0.8)')
),row=1, col=1)
我在 github 上找到了解决方案: