我正在尝试绘制包含 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 轴值对于每个数据系列都是特定的。 我有一个解决方法,首先使用 px 绘制单条线,然后使用图形对象将它们添加在一起。然而它很麻烦(例如我不知道如何添加图例)。
实现这一目标的正确且简单的方法是什么? 感谢您的任何提示!
我想我需要将数据帧中的数据融合为长格式而不是宽格式。
事实上你可以融化数据框
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()