簡體   English   中英

如何在 python 中繪制箱線圖(一個圖中有多個箱線圖)

[英]How Can I draw a plot of box plots in python (multiple box-plots in one plot)

以下是我擁有的數據集示例:

df = pd.DataFrame(np.array([[1,40], [2, 51], [3, 59], [4, 10], [5, 30], [7, 20], [9, 21], [13, 30], [15, 70], [2, 81]]),columns=['A', 'B')

根據 AI 列中的值定義了三個組:

Group_1A = df[(df['A'] >= 0) & (df['A'] <= 3)]
Group_2A = df[(df['A'] >= 4) & (df['A'] <= 7)]
Group_3A = df[(df['A'] >= 9) & (df['A'] <= 15)]

對於 column BI 也有如下三組:

Group_1B = df[(df['B'] >= 10) & (df['B'] <= 30)]
Group_2B = df[(df['B'] >= 40) & (df['B'] <= 60)]
Group_3B = df[(df['B'] >= 70) & (df['B'] <= 100)]

現在我需要一個能同時顯示所有 9 個箱形圖的圖。 ……就像下圖。 在此處輸入圖像描述

我嘗試使用 seaborn.boxplot 並嘗試查看是否可以單獨繪制 9 個箱線圖,然后將它們組合在一起,但它沒有用。 例如,我嘗試根據 group1A 和 1B 定義一個新的數據集,如下所示:

df2 = Group_1A[Group_1A[(df['B'] >= 10) & (df['B'] <= 30)]] 
fig, ax = plt.subplots(figsize=(9,9))
ax = sns.boxplot(x="B",y="A", data=df2,ax=ax)#,order=order)

這只會給我一個箱線圖(當 A 在 [0-3] 范圍內,B 在 [10-30] 范圍內時)。 在此處輸入圖像描述

我想知道是否有人可以幫助我。

提前致謝

您是否要為每個組繪制“B”的分布?

這段代碼給出了類似於您提供的繪圖的內容,但我可能誤解了這個問題。

df = pd.DataFrame(np.array([[1,40], [2, 51], [3, 59], [4, 10], [5, 30], [7, 20], [9, 21], [13, 30], [15, 70], [2, 81]]),columns=['A', 'B'])
lim_A = [[0,3],[4,7],[9,15]]
lim_B = [[10,30],[40,60],[70,100]]


fig, ax = plt.subplots()
boxes = []
for ypos,a in enumerate(lim_A):
    for b in lim_B:
        temp = df.loc[(df.A>=a[0])&(df.A<=a[1])&(df.B>=b[0])&(df.B<=b[1])]
        boxes.append(ax.boxplot(temp['B'].values, vert=False, positions=[ypos]))

ax.set_ylim(-0.5,(len(lim_A)-1)+0.5)
ax.set_yticks(range(len(lim_A)))
ax.set_yticklabels([f'[{a}–{b}]' for a,b in lim_A])

ax.set_xticks([np.mean(a) for a in lim_B])
ax.set_xticklabels([f'[{a}–{b}]' for a,b in lim_B])

ax.set_xlabel('B')
ax.set_ylabel('A')

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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