我有兩個熊貓資料框,其中包含三個不同類別的資料:“a”、“b”和“c”。
import pandas as pd
import numpy as np
n=100
df_a = pd.DataFrame({'id': np.ravel([['a' for i in range(n)], ['b' for i in range(n)], ['c' for i in range(n)]]),
'val': np.random.normal(0, 1, 3*n)})
df_b = pd.DataFrame({'id': np.ravel([['a' for i in range(n)], ['b' for i in range(n)], ['c' for i in range(n)]]),
'val': np.random.normal(1, 1, 3*n)})
我想說明兩個資料框之間“a”、“b”和“c”的區別,為此我想使用箱線圖。即,對于每個類別(“a”、“b”和“c”),我想制作并排的箱線圖——它們都應該在同一個圖中。
所以一個圖包含 6 個箱線圖,每個類別 2 個。我怎樣才能最簡單地做到這一點?
uj5u.com熱心網友回復:
國際大學聯盟:
import matplotlib.pyplot as plt
fig, axes = plt.subplots(3, 2)
for j, df in enumerate([df_a, df_b]):
for i, cat in enumerate(sorted(df['id'].unique())):
df[df['id'] == cat].boxplot('val', 'id', ax=axes[i, j])
plt.tight_layout()
plt.show()

uj5u.com熱心網友回復:
這有幫助嗎?我試圖讓它有點動態/靈活
import matplotlib.pyplot as plt
import pandas
import seaborn as sns
ids = [val for val in df_a["id"].unique() for _ in (0, 1)]
fig, ax = plt.subplots(len(ids)//2,2, figsize=(10,10))
plt.subplots_adjust(hspace=0.5, wspace=0.3)
plt.suptitle("df_a vs. df_b")
ax = ax.ravel()
for i, id in enumerate(ids):
if i%2 == 0:
ax[i] = sns.boxplot(x=df_a[df_a.id == id]["val"], ax = ax[i])
else:
ax[i] = sns.boxplot(x=df_b[df_b.id == id]["val"], ax = ax[i])
ax[i].set_title(id)
sns.despine()
uj5u.com熱心網友回復:
您可以添加一個額外的列來指示資料集,然后連接資料框:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
n = 100
df_a = pd.DataFrame({'id': np.ravel([['a' for i in range(n)], ['b' for i in range(n)], ['c' for i in range(n)]]),
'val': np.random.normal(0, 1, 3 * n)})
df_b = pd.DataFrame({'id': np.ravel([['a' for i in range(n)], ['b' for i in range(n)], ['c' for i in range(n)]]),
'val': np.random.normal(1, 1, 3 * n)})
df_a['dataset'] = 'set a'
df_b['dataset'] = 'set b'
sns.boxplot(data=pd.concat([df_a, df_b]), x='id', y='val', hue='dataset', palette='spring')
plt.tight_layout()
plt.show()

PS:請注意,在 matplotlib(和基于它的 seaborn)中,afigure是一個帶有一個或多個子圖的圖(稱為ax)。當您寫figure而不是 時plot,它可能會給人一種您想要多個子圖的印象。您可以使用sns.catplot(...., kind='box')從串聯資料框中創建多個子圖。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/447234.html
標籤:Python 熊猫 matplotlib 海运
下一篇:如何在圖表中添加列標簽
