Plotly:如何在 Plotly Express 中注释多行?
Plotly : How to annotate multiple lines in Plotly Express?
我想创建一个折线图,其中有多条线共享相同的 x 轴和 y 轴。
幸运的是,最新版本的 Plotly 似乎允许将多个输入作为 y。
例子:
px.line(df,x,[y1,y2])
工作正常。
不幸的是,我想将文本添加为数据点注释,但它的工作方式不同。
我的目标是创建一个包含多条线的线图,每个数据点都用与相应线相同颜色的 y_value 进行注释。
谢谢你的帮助!
也许这不是最优雅的方法,但下面的完整代码片段将生成下图。片段的一些中心部分是:
方法:
for i, d in enumerate(fig.data):
for j, a in enumerate(d.x):
fig.add_annotation(x=a, y = d.y[j], text = str(d.y[j])[:5],
showarrow = False,
yshift = 10,
font=dict(color=d.line.color, size=12))
地块 1:
如果您想关注其他 color cycles 的注释,只需包括:
colors = px.colors.qualitative.Alphabet
并替换:
font=dict(color=d.line.color, size=12)
与:
font=dict(color=colors[i], size=12)
并得到:
情节 2:
如果您可以使用,我很乐意详细介绍所有细节。
完整代码:
# imports
import pandas as pd
import plotly.express as px
# data
df = px.data.stocks().tail(10)
df = df.drop(['AMZN', 'AAPL'], axis = 1)
df.set_index('date', inplace = True)
colors = px.colors.qualitative.Alphabet
fig = px.line(df, x = df.index, y = df.columns)
for i, d in enumerate(fig.data):
for j, a in enumerate(d.x):
fig.add_annotation(x=a, y = d.y[j], text = str(d.y[j])[:5],
showarrow = False,
yshift = 10,
font=dict(color=d.line.color, size=12)
# font=dict(color=colors[i], size=12)
)
fig.show()
我想创建一个折线图,其中有多条线共享相同的 x 轴和 y 轴。
幸运的是,最新版本的 Plotly 似乎允许将多个输入作为 y。
例子:
px.line(df,x,[y1,y2])
工作正常。
不幸的是,我想将文本添加为数据点注释,但它的工作方式不同。
我的目标是创建一个包含多条线的线图,每个数据点都用与相应线相同颜色的 y_value 进行注释。
谢谢你的帮助!
也许这不是最优雅的方法,但下面的完整代码片段将生成下图。片段的一些中心部分是:
方法:
for i, d in enumerate(fig.data):
for j, a in enumerate(d.x):
fig.add_annotation(x=a, y = d.y[j], text = str(d.y[j])[:5],
showarrow = False,
yshift = 10,
font=dict(color=d.line.color, size=12))
地块 1:
如果您想关注其他 color cycles 的注释,只需包括:
colors = px.colors.qualitative.Alphabet
并替换:
font=dict(color=d.line.color, size=12)
与:
font=dict(color=colors[i], size=12)
并得到:
情节 2:
如果您可以使用,我很乐意详细介绍所有细节。
完整代码:
# imports
import pandas as pd
import plotly.express as px
# data
df = px.data.stocks().tail(10)
df = df.drop(['AMZN', 'AAPL'], axis = 1)
df.set_index('date', inplace = True)
colors = px.colors.qualitative.Alphabet
fig = px.line(df, x = df.index, y = df.columns)
for i, d in enumerate(fig.data):
for j, a in enumerate(d.x):
fig.add_annotation(x=a, y = d.y[j], text = str(d.y[j])[:5],
showarrow = False,
yshift = 10,
font=dict(color=d.line.color, size=12)
# font=dict(color=colors[i], size=12)
)
fig.show()