首页 > 解决方案 > 将数据添加到带有 suplots 的跟踪中,以维护破折号中每个子图的数据拆分

问题描述

我有虚拟数据框:

import pandas as pd
df=pd.DataFrame({'A':[1,2,3,20,30,40],'B':['Tita','Tita','Tita','Burru','Burru','Burru'],'Z':[1,2,3,1,2,3]})

我想为 B 列(Tita 和 Burru)中的每个值创建一个子图。

此代码产生预期的输出:

from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=1, cols=2)
lista_syst=df.B.unique()

fig.add_trace(
    go.Scatter(x=df.loc[df['B'] == 'Tita', 'A'], y=df.loc[df['B'] == 'Tita', 'Z']),
    row=1, col=1
)

fig.add_trace(
    go.Scatter(x=df.loc[df['B'] == 'Burru', 'A'], y=df.loc[df['B'] == 'Burru', 'Z']),
    row=1, col=2
)

fig.update_layout(height=600, width=800, title_text="Subplots")
fig.show()

在此处输入图像描述

但我想让它自动为B 列中的n 个可能值,如下所示:

from plotly.subplots import make_subplots
import plotly.graph_objects as go
df=pd.DataFrame({'A':[1,2,3,20,30,40],'B':['Tita','Tita','Tita','Burru','Burru','Burru'],'Z':[1,2,3,1,2,3]})
fig = make_subplots(rows=1, cols=2)
lista_syst=df.B.unique()
for sist in lista_syst:
    print(sist)
    print(df.loc[df['B'] == sist, 'A'])
    for i in range(1,3):
        fig.add_trace(
            go.Scatter(y=df.loc[df['B'] == sist, 'A'],x=df.loc[df['B'] == sist, 'Z']),
            row=1,col=i

        )

最后一个代码返回两个包含所有值的重复图(B 中的两个值使用相同的图两次),怎么会这样?

在此处输入图像描述

有可能做我想做的事吗?

标签: pythonplotly-dash

解决方案


你在寻找这样的东西吗?

from plotly.subplots import make_subplots
import plotly.graph_objects as go
df=pd.DataFrame({'A':[1,2,3,20,30,40],'B':['Tita','Tita','Tita','Burru','Burru','Burru'],'Z':[1,2,3,1,2,3]})

fig = make_subplots(rows=1, cols=2)
lista_syst=df.B.unique()

for sist in lista_syst:
    print(sist)
    print(df.loc[df['B'] == sist, 'A'])
    fig.add_trace(
            go.Scatter(
                x=df.loc[df['B'] == sist, 'Z'],
                y=df.loc[df['B'] == sist, 'A']))
fig.update_layout(height=600, width=800, title_text="Subplots")
fig.show()

这给了你: 在此处输入图像描述

评论后编辑:
如果您希望单独的图表彼此相邻,那么您可以执行以下操作:

from plotly.subplots import make_subplots
import plotly.graph_objects as go
df=pd.DataFrame({'A':[1,2,3,20,30,40],'B':['Tita','Tita','Tita','Burru','Burru','Burru'],'Z':[1,2,3,1,2,3]})
fig = make_subplots(rows=1, cols=2)
lista_syst=df.B.unique()
i=0
for sist in lista_syst:
    i=i+1
    fig.add_trace(
            go.Scatter(x=df.loc[df['B'] == sist, 'A'],y=df.loc[df['B'] == sist, 'Z']),
            row=1,col=i
        )
fig.update_layout(height=600, width=800, title_text="Subplots")
fig.show()

这给了你: 在此处输入图像描述


推荐阅读