簡體   English   中英

Plotly for 循環中箱線圖的子圖 Python

[英]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 制作子圖。

  • 根據您的規格合成了 9 個額外的數據幀
  • 構造所有已定義變量 df1 到df9的字典。 這是為了啟用簡單循環
  • 現在只是一個簡單的例子,在創建具有適當行數的圖形后,跨所有數據幀創建所有軌跡
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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM