有没有办法使用 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()

enter image description here

生成 Plotly 图而不是 matplotlib 图表。

解决方法

import plotly.graph_objects as go
from plotly.subplots import make_subplots

# using your sample data

fig = make_subplots(rows=2,cols=2,start_cell="bottom-left")

fig.add_trace(go.Scatter(x=data.index,y=data.Temperature,name='Temp'),row=1,col=1,)

fig.add_trace(go.Scatter(x=data.index,y=data.Wind,name='Wind'),col=2)

fig.add_trace(go.Scatter(x=data.index,y=data.Humidity,name='Humidity'),row=2,col=1)

fig.add_trace(go.Scatter(x=data.index,y=data.Pressure,name='Pressure'),col=2)

fig.show()

enter image description here

,

对于一个情节快速的解决方案:
您可以使用 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'])

您的数据框现在看起来像这样,名为“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

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

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

结果如下图: plotly express facet_col instead of subplots

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

fig.update_yaxes(showticklabels=True,matches=None)

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...