Plotly:如何在一张图中输出多个折线图?

Man*_*kla 5 python for-loop linegraph dataframe plotly

我正在尝试使用plotly为单个图中的多个数据帧绘制折线图。我的代码是:

import plotly.express as px
labels=category_names[:10]
for category in category_names[:10]:
    df_b=df1[df1['Country/Region']==category]    
    fig=px.line(df_b, x="Date", y="Confirmed",labels="Country/Region") 
    print(category)    
fig.show()
Run Code Online (Sandbox Code Playgroud)

但是,通过使用上面的代码,我只能获取 for 循环最后一次迭代的线图。

电流输出:

在此输入图像描述

期望的输出:

在此输入图像描述

请帮助我的代码!

ves*_*and 8

使用plotly.expresswith ,只要您的数据集是某种格式,px.line()您就不必使用 a来在单个图中输出多行。您可能会混淆这种使用 a和 的方法,这可以说更适合将国家/地区作为列名称、时间作为索引以及数据框中单个类别的值的数据格式。for looplongfor loopfig.add_figure()wide

如果没有适当的数据样本,就很难 100% 确定您的问题是什么。但在我看来,你的数据结构与结构相匹配px.data.gapminder()

    country continent   year    lifeExp pop         gdpPercap   iso_alpha   iso_num
0   Afghanistan Asia    1952    28.801  8425333     779.445314  AFG 4
1   Afghanistan Asia    1957    30.332  9240934     820.853030  AFG 4
2   Afghanistan Asia    1962    31.997  10267083    853.100710  AFG 4
3   Afghanistan Asia    1967    34.020  11537966    836.197138  AFG 4
4   Afghanistan Asia    1972    36.088  13079460    739.981106  AFG 4
Run Code Online (Sandbox Code Playgroud)

因此,我将在此基础上提供一个答案,您可以尝试从那里进行整理。当然,除非您愿意分享完整的数据示例和代码片段。

阴谋:

在此输入图像描述

完整代码:

import plotly.express as px
import plotly.graph_objects as go
import pandas as pd

# sample dataset from plotly express
df = px.data.gapminder()

# Filter and pivot dataset for each country,
# and add lines for each country
fig = go.Figure()
for c in df['country'].unique()[:3]:
    dfp = df[df['country']==c].pivot(index='year', columns='country', values='pop') 
    fig.add_traces(go.Scatter(x=dfp.index, y=dfp[c], mode='lines', name = c))

fig.show()
Run Code Online (Sandbox Code Playgroud)

此代码片段的作用是将源子集划分为每个独特的类别,例如:

    country continent   year    lifeExp pop gdpPercap   iso_alpha   iso_num
564 Germany Europe  1952    67.5    69145952    7144.114393 DEU 276
565 Germany Europe  1957    69.1    71019069    10187.826650    DEU 276
566 Germany Europe  1962    70.3    73739117    12902.462910    DEU 276
567 Germany Europe  1967    70.8    76368453    14745.625610    DEU 276
568 Germany Europe  1972    71.0    78717088    18016.180270    DEU 276
Run Code Online (Sandbox Code Playgroud)

...并使用该数据集进行旋转df[df['country']=='Germany'].pivot(index='year', columns='country', values='pop')以获得:

country Germany
year    
1952    69145952
1957    71019069
1962    73739117
1967    76368453
1972    78717088
1977    78160773
1982    78335266
1987    77718298
1992    80597764
1997    82011073
2002    82350671
2007    82400996
Run Code Online (Sandbox Code Playgroud)

...然后使用将该数据添加到绘图中fig.add_traces()