Ответ:
Чтобы добавить линию к существующей графической фигуре, просто используйте:
fig.add_shape(type='line',...)
Детали:
Я понял this - это сообщение, которое вы видели с тех пор, как микшируете в matplotlib. И как уже было сказано в комментариях, axvline
не имеет ничего общего с сюжетом. Это использовалось только в качестве примера того, как вы могли бы сделать это с помощью matplotlib. Используя plotly, я бы либо go, либо fig.add_shape(go.layout.Shape(type="line")
. Но прежде чем вы попробуете это сами, имейте в виду, что cufflinks
устарел. Запонки мне очень понравились, но теперь есть более удобные варианты построения как быстрых, так и подробных графиков. Если вы хотите использовать однострочники, аналогичные iplot
, я бы предложил использовать plotly.express
. Единственное препятствие в вашем случае - это изменение вашего набора данных с широкого на длинный формат, который предпочитает plotly.express
. Приведенный ниже фрагмент делает именно это, чтобы создать следующий график:
Код:
import numpy as np
import pandas as pd
import plotly.express as px
from plotly.offline import iplot
#
np.random.seed(123)
X = np.random.randn(1000,3)
df=pd.DataFrame(X, columns=['a','b','c'])
df['id'] = df.index
df = pd.melt(df, id_vars='id', value_vars=df.columns[:-1])
# plotly line figure
fig = px.line(df, x='id', y='value', color='variable')
# lines to add, specified by x-position
lines = {'a':500,'c':700,'a':900,'b':950}
# add lines using absolute references
for k in lines.keys():
#print(k)
fig.add_shape(type='line',
yref="y",
xref="x",
x0=lines[k],
y0=df['value'].min()*1.2,
x1=lines[k],
y1=df['value'].max()*1.2,
line=dict(color='black', width=3))
fig.add_annotation(
x=lines[k],
y=1.06,
yref='paper',
showarrow=False,
text=k)
fig.show()