如何在plotly.express中添加痕迹

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

我对 python 和plotly.express 非常陌生,我发现它很令人困惑......

我正在尝试使用向我的图形添加不同轨迹的原理,使用此处显示的示例代码https://plotly.com/python/line-charts/,线图模式,#Create 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()

以上线条生成具有正确数据的散点图/线图,但数据混合在一起。我有来自 2 个不同来源的数据,在 .csv 文件中用名为“Strain”的列标记,我希望图表能够反映这些数据。

跟踪选项是一种可能的方法吗,还是有其他方法?

python-3.x plotly scatter
6个回答
23
投票

您可以使用

.select_traces()
使用快速绘图添加迹线。比如:

fig.add_traces(
    list(px.line(...).select_traces())
)

注意需要转换为

list
,因为
.select_traces()
返回一个生成器。


9
投票

看起来您可能也希望在单个绘图上包含带有散点的线条?

您将

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

您已经导入了图形对象,因此您可以将

add_trace
go
一起使用,如下所示:

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
投票

您可以使用Plotly:如何使用 Plotly Express 组合散点图和线图?

中所述的方法
fig3 = go.Figure(data=fig1.data + fig2.data)

或更方便且可扩展的方法:

fig1.data
fig2.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
投票

感谢您花时间帮助我。我最终得到了两个有效的解决方案,其中使用“facet_col”将图分为两个子图(每个菌株 1 个)是最简单的解决方案。

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

0
投票

与@Peque的答案类似,您可以使用plotly.express图的

.data
属性:

fig.add_traces(
    px.line(df, x='x', y='y').data
)

带有数据的玩具示例:

import pandas as pd
import plotly.express as px

# load toy data
data = px.data.gapminder()

fig = px.scatter(data, x="year", y="pop", color="country")

fig.add_traces(
    px.line(data, x="year", y="pop", color="country").data
)

fig.show()

请注意,

.add_trace
(没有“s”)将不能在玩具示例中工作:px.line调用构建了一个跟踪元组。

© www.soinside.com 2019 - 2024. All rights reserved.