Plotly Express 中的多个子图和多种颜色

Multiple Subplots & Multiple Colors in Plotly Express

在给定具有多种颜色的 pandas 数据框的情况下,我无法在 plotly 中创建子图。

这是一个创建独立地块的不完整示例:

import plotly

df = plotly.express.data.iris()

plot1 = plotly.express.scatter(df, x="sepal_width", y="sepal_length", color="species")
plot2 = plotly.express.scatter(df, x="petal_width", y="petal_length", color="species")

plot1.show(), plot2.show()

根据我的阅读,这样的事情有道理但行不通:

import plotly

df = plotly.express.data.iris()

plot1 = plotly.express.scatter(df, x="sepal_width", y="sepal_length", color="species")
plot2 = plotly.express.scatter(df, x="petal_width", y="petal_length", color="species")

fig = plotly.subplots.make_subplots(rows=1, cols=2)

fig.append_trace(plot1, row=1, col=1)
fig.append_trace(plot2, row=1, col=2)

fig.show()

对此进行调查,其他人似乎使用类似的设置解决了这个问题:

r-beginners 在下面给出了一个很好的例子,说明如何用一种颜色制作多个子图,但这会导致许多颜色的性能问题。

我在这些示例中遗漏了什么?

编辑:为示例添加了颜色。添加了不完整的示例。

为什么不能按照链接示例完成可能是因为 px 和 go 具有不同的内部数据。我还没有证实这一点。 我修改的一点是数据可以指定为plotl1.data[0]这种格式来得到散点图数据

import plotly.express as px
from plotly.subplots import make_subplots

df = px.data.iris()

plot1 = px.scatter(df, x="sepal_width", y="sepal_length", color="species")
plot2 = px.scatter(df, x="petal_width", y="petal_length", color="species")

#print(plot1['data'][0],plot1['data'][1],plot1['data'][2], end='\n')

fig = make_subplots(rows=1, cols=2, specs=[[{"type": "scatter"}, {"type": "scatter"}]])

fig.append_trace(plot1['data'][0], row=1, col=1)
fig.append_trace(plot1['data'][1], row=1, col=1)
fig.append_trace(plot1['data'][2], row=1, col=1)
fig.append_trace(plot2['data'][0], row=1, col=2)
fig.append_trace(plot2['data'][1], row=1, col=2)
fig.append_trace(plot2['data'][2], row=1, col=2)

fig.update_layout(showlegend=False)
fig.show()

我认为我的例子很差,但是 r-beginners 给出了问题的最佳解决方案。

我正在处理的数据具有相同的 x 和 y 轴标签。因此,如果有 n 个数据帧,您可以通过添加 facet_col 并连接它们来利用这一事实。

embed_df = pd.concat([
    df1,
    df2,
    df3,
    df4,
    ....
])

fig = plotly.express.scatter(
    embed_df,
    x = "dim1",
    y = "dim2",
    color="label",
    facet_col="name")