如何在plotlyexpress中在两个轴上绘制多列?

问题描述 投票:0回答:2

我正在尝试绘制包含 pandas 数据框中的多条线的折线图。我想使用多个列对作为 x 轴和 y 轴的数据,但plotly express允许我仅使用一列作为 x 轴。 数据框看起来像这样:

df = pandas.DataFrame({"sample 1 x":[0,1,3,6,11,18,28,41,58], "sample 1 y":[0,1,2,3,5,7,10,13,17],
                       "sample 2 x":[0,1,2,4,7,10,14,17,19], "sample 2 y":[0,1,1,2,3,3,4,3,2]})

结果是简单的多线图,但问题是 x 轴值对于每个数据系列都是特定的。 Here's the approximate layout I'd like to get (example generated with actual data). 我有一个解决方法,首先使用 px 绘制单条线,然后使用图形对象将它们添加在一起。然而它很麻烦(例如我不知道如何添加图例)。

实现这一目标的正确且简单的方法是什么? 感谢您的任何提示!

python plotly plotly-express
2个回答
0
投票

我想我需要将数据帧中的数据融合为长格式而不是宽格式。


0
投票

事实上你可以融化数据框

import plotly.express as px

df1 = pd.melt(df, id_vars=['sample 1 x'], value_vars=['sample 1 y']).rename(columns={"sample 1 x": "x"})
df2 = pd.melt(df, id_vars=['sample 2 x'], value_vars=['sample 2 y']).rename(columns={"sample 2 x": "x"})
df = df1.merge(df2, how="outer", on="x")

fig = px.lines(df, x="x", y="value", color="variable")
fig.show()

如果您不想更改原始数据框,这里有一个使用plotly graph_objects 的替代解决方案(@r-beginners 的转发)

import plotly.graph_objects as go

fig = go.Figure()
fig.add_scatter(x=df['sample 1 x'], y=df['sample 1 y'], name='sample 1', mode='lines')
fig.add_scatter(x=df['sample 2 x'], y=df['sample 2 y'], name='sample 2', mode='lines')

fig.show()
© www.soinside.com 2019 - 2024. All rights reserved.