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")
在给定具有多种颜色的 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")