Plotly:如何在 Plotly Express 中注释多行?

Posted

技术标签:

【中文标题】Plotly:如何在 Plotly Express 中注释多行?【英文标题】:Plotly : How to annotate multiple lines in Plotly Express? 【发布时间】:2021-10-21 22:57:43 【问题描述】:

我想创建一个折线图,其中多条线共享相同的 x 和 y 轴。 幸运的是,最新版本的 Plotly 似乎允许多个输入为 y。 例子: px.line(df,x,[y1,y2]) 工作正常。

不幸的是,我想将文本添加为​​数据点注释,但效果不一样。

我的目标是创建一个包含多条线的线图,并且每个数据点都使用与对应线相同颜色的 y_value 进行注释。

求你的帮助!

【问题讨论】:

完美运行,请您帮忙! 不客气! 【参考方案1】:

也许不是最优雅的方法,但是下面完整的sn-p会产生下图。 sn-ps 的一些核心部分是:

方法:

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()

【讨论】:

以上是关于Plotly:如何在 Plotly Express 中注释多行?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Plotly Express 和 Plotly 隐藏图例

Plotly:如何在 plotly express 折线图中更改图例的变量/标签名称?

Plotly:使用 plotly express 行时如何在 hoverinfo 中格式化日期?

Plotly:如何手动设置 plotly express 散点图中点的颜色?

Plotly:如何使用 plotly express 自定义 xaxis 刻度标签?

Plotly:如何重命名 plotly express 堆积条形图的图例元素?