如何在plotly.express中添加轨迹

19

我对Python和Plotly.express非常陌生,发现很难理解...

我试图使用示例代码(https://plotly.com/python/line-charts/,线条图模式,#创建 traces)将不同的 traces 添加到我的图表中。

但是,我的数据来自一个 .CSV 文件。

import plotly.express as px
import plotly as plotly
import plotly.graph_objs as go
import pandas as pd

data = pd.read_csv(r"C:\Users\x.csv")

fig = px.scatter(data, x="Time", y="OD", color="C-source", size="C:A 1 ratio")

fig = px.line(data, x="Time", y="OD", color="C-source")
fig.show()

以上代码产生正确数据的散点图/折线图,但数据混合在一起。 我有来自名为“Strain”的列标记的2个不同来源的数据,我希望图表能够反映。

跟踪选项是否是实现此目的的可能方法,还是有其他方法?

使用px.line绘制的图

5个回答

23
您可以使用Express绘图中的.select_traces()来添加轨迹。就像这样:
fig.add_traces(
    list(px.line(...).select_traces())
)
请注意需要转换为list,因为.select_traces()返回一个生成器。

有些事情是这样改变的,例如标签。 - Mathy
但是布局丢失了,我们该如何添加布局? - Hamzah
@Hamzah @Mathy 使用update_layout()函数。 - Michael McFarlane

9

看起来您希望在同一图表上同时显示具有散点的线条?

您将 fig 设定为等于 px.scatter(),然后再设定(更改)为等于 px.line()。当设定为 line 时,散点图被覆盖。

您已经导入了图形对象,因此可以使用 goadd_trace 方法,例如:

fig.add_trace(go.Scatter(x=data["Time"], y=data["OD"], mode='markers', marker=dict(color=data["C-source"], size=data["C:A 1 ratio"])))

根据您的数据设置不同,您可能需要单独添加每个C源,类似于执行以下操作:
x=data.query("C-source=='Term'")["Time"], ... , name='Term'`

以下是关于散点图设置的示例和选项的参考资料:

散点图示例

标记样式

散点图参数和属性


3
有没有办法在fig.add_trace中传递一个plotly.express图形而不是graph_object? - Naman Bansal
@NamanBansal 很抱歉回复得这么晚,我刚刚看到这个消息,但还是想回复一下,以防其他人也有同样的疑问。我尝试了很多方法,但是无法弄清楚如何使其工作。所以根据我的经验,我认为可能是不可能的。希望如果有人知道如何在express graph中使其工作,他们会在这里回复让我们知道。 - undefined

3

您可以使用在Plotly:如何使用Plotly Express结合散点图和折线图?中提到的方法。

fig3 = go.Figure(data=fig1.data + fig2.data)

一个更方便和可扩展的方法是: fig1.datafig2.data 是常见的元组,它们保存了绘图所需的所有信息,并且 + 只是将它们连接起来。
# this will hold all figures until they are combined
all_figures = []

# data_collection: dictionary with Pandas dataframes
 
for df_label in data_collection:

    df = data_collection[df_label]
    fig = px.line(df, x='Date', y=['Value'])
    all_figures.append(fig)

import operator
import functools

# now you can concatenate all the data tuples
# by using the programmatic add operator 
fig3 = go.Figure(data=functools.reduce(operator.add, [_.data for _ in all_figures]))
fig3.show()

1
或者您可以附加 fig.data 然后 go.Figure(data=sum(all_figures, ()))。如果需要迭代两次,则使用 go.Figure(data=sum((fig.data for fig in figures), ()))。^^ - Peque

1
感谢您抽出时间帮助我。最终我得到了两个可行的解决方案,其中使用“facet_col”将图形分成两个子图(每个菌株一个)是最简单的解决方案。

https://plotly.com/python/axes/


0

谢谢。这对我也有用,其中Fig_Set_B是散点图列表

# create a tuple of first line plots in first 6 plots from plot set Fig_Set_B` 
fig_combined = go.Figure(data= tuple(Fig_Set_B[x].data[0] for x in range(6)) ) 
fig_combined.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接