[英]Plotly subplots of boxplot in for-loop Python
當已經使用 for 循環創建了每個單獨的子圖的跟蹤時,我如何通過使用 for 循環制作子圖,到目前為止我得到的是:
import plotly.express as px
import plotly.io as pio
import kaleido
pio.renderers.default='browser' #change to browser or svg
import plotly.graph_objects as go
from plotly.subplots import make_subplots
df1 = pd.DataFrame({'in1' : [100, 150, 110, 180, 125],
'in2' : [200, 210, 125, 125, 293],
'in3' : [50, 35, 200, 100, 180]
})
a = ['c', 'd', 'e', 'f','g']
df1t = df1.T
df1t.columns= a
fig = make_subplots()
for col in df1t:
fig.add_trace(go.Box(y=df1t[col].values, name=str(df1t[col].name)))
fig.show()
但是我有多個名為 df2、df3、df4、df5、df6、df7、df8 和 df9 的數據幀,它們的繪制方式與上面相同,列名為 a。 我想為每個 df 制作子圖。
import plotly.express as px
import plotly.io as pio
import kaleido
import pandas as pd
import numpy as np
pio.renderers.default = "browser" # change to browser or svg
import plotly.graph_objects as go
from plotly.subplots import make_subplots
df1 = pd.DataFrame(
{
"in1": [100, 150, 110, 180, 125],
"in2": [200, 210, 125, 125, 293],
"in3": [50, 35, 200, 100, 180],
}
)
# fmt: off
df2 = pd.DataFrame((df1.values * np.random.uniform(0.8, 1.2, size=df1.shape)).astype(int),columns=df1.columns)
df3 = pd.DataFrame((df1.values * np.random.uniform(0.8, 1.2, size=df1.shape)).astype(int),columns=df1.columns)
df4 = pd.DataFrame((df1.values * np.random.uniform(0.8, 1.2, size=df1.shape)).astype(int),columns=df1.columns)
df5 = pd.DataFrame((df1.values * np.random.uniform(0.8, 1.2, size=df1.shape)).astype(int),columns=df1.columns)
df6 = pd.DataFrame((df1.values * np.random.uniform(0.8, 1.2, size=df1.shape)).astype(int),columns=df1.columns)
df7 = pd.DataFrame((df1.values * np.random.uniform(0.8, 1.2, size=df1.shape)).astype(int),columns=df1.columns)
df8 = pd.DataFrame((df1.values * np.random.uniform(0.8, 1.2, size=df1.shape)).astype(int),columns=df1.columns)
df9 = pd.DataFrame((df1.values * np.random.uniform(0.8, 1.2, size=df1.shape)).astype(int),columns=df1.columns)
# fmt: on
# create dictionary of dataframes, by inspecting defined variables
dfs = {
varname: eval(varname)
for varname in dir()
if varname[0:2] == "df" and len(varname) == 3 and varname[2] in "123456789"
}
a = ["c", "d", "e", "f", "g"]
# create sub-plots based on number of dataframes
fig = make_subplots(rows=len(dfs.keys()))
# add traces to appropriate subplot for dataframe
for r, df in enumerate(dfs.values()):
df1t = df.T
df1t.columns = a
for col in df1t:
fig.add_trace(
go.Box(y=df1t[col].values, name=str(df1t[col].name)), row=r + 1, col=1
)
fig.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.