有没有办法使用 Plotlyexpress 来显示多个子图

Myc*_*cha 6 python pandas plotly plotly-python plotly-express

我很想知道是否有相当于:

import pandas as pd
import numpy as np

data = pd.DataFrame({'Day':range(10),
                     'Temperature': np.random.rand(10), 
                     'Wind': np.random.rand(10),
                     'Humidity': np.random.rand(10),
                     'Pressure': np.random.rand(10)})

data.set_index('Day').plot(subplots=True, layout=(2,2), figsize=(10,5))
plt.tight_layout()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

这会生成 Plotly 图表,而不是 matplotlib 图表。

San*_*ord 8

对于一个情节明确的解决方案:
您可以使用pd.melt()将所有变量放在同一列中:

import pandas as pd
import plotly.express as px

df = pd.DataFrame({
    'Day':range(10),
    'Temperature': np.random.rand(10), 
    'Wind': np.random.rand(10),
    'Humidity': np.random.rand(10),
    'Pressure': np.random.rand(10),})

df_melt = df.melt(
    id_vars='Day', 
    value_vars=['Temperature', 'Wind', 'Humidity', 'Pressure'])
Run Code Online (Sandbox Code Playgroud)

您的数据框现在看起来像这样,变量名称位于名为“variable”的列中,值位于名为“value”的列中:

    Day variable    value
0   0   Temperature 0.609
1   1   Temperature 0.410
2   2   Temperature 0.194
3   3   Temperature 0.663
4   4   Temperature 0.351
Run Code Online (Sandbox Code Playgroud)

现在您可以使用px.scatter()with 参数facet_col来获取多个图:

fig = px.scatter(
    df_melt, 
    x='Day', 
    y='value', 
    facet_col='variable', 
    facet_col_wrap=2, 
    color='variable', 
    width=800,
)
Run Code Online (Sandbox Code Playgroud)

结果如下图: 情节地表达facet_col而不是子图

现在,在您的示例中,所有变量都具有相同的值范围。但如果情况并非如此,那么您可能需要确保每个图在 y 轴上都有自己的范围。这可以按如下方式完成:

fig.update_yaxes(showticklabels=True, matches=None)
Run Code Online (Sandbox Code Playgroud)

有关构面图的更多信息可以在这里找到:
https ://plotly.com/python/facet-plots/