我对 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”的列标记,我希望图表能够反映这些数据。
跟踪选项是一种可能的方法吗,还是有其他方法?
您可以使用
.select_traces()
使用快速绘图添加迹线。比如:
fig.add_traces(
list(px.line(...).select_traces())
)
注意需要转换为
list
,因为 .select_traces()
返回一个生成器。
看起来您可能也希望在单个绘图上包含带有散点的线条?
您将
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'`
以下是一些参考资料,其中包含可用于设置散布的示例和选项:
标记样式佛
您可以使用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()
感谢您花时间帮助我。我最终得到了两个有效的解决方案,其中使用“facet_col”将图分为两个子图(每个菌株 1 个)是最简单的解决方案。
谢谢。这对我也有用,其中 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()
与@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调用构建了一个跟踪元组。