![](/img/trans.png)
[英]How to plot multiple figures as subplots and multiples columns of a dataframe in seaborn?
[英]How to plot multiple figures in a row using seaborn
我有一個看起來像這樣的數據框df
:
df.head()
id feedback nlp_model similarity_score
0xijh4 1 tfidf 0.36
0sdnj7 -1 lda 0.89
kjh458 1 doc2vec 0.78
....
我想繪制similairty_score
使用seaborn每個在獨特的價值觀與反饋的箱線圖形式model
柱: tfidf
, lda
, doc2vec
。 我的代碼如下:
fig, ax = plt.subplots(figsize=(10,8))
ax = sns.boxplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='tfidf'])
ax = sns.swarmplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='tfidf'], color="0.25")
fig, ax = plt.subplots(figsize=(10,8))
ax = sns.boxplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='lda'])
ax = sns.swarmplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='lda'], color="0.25")
fig, ax = plt.subplots(figsize=(10,8))
ax = sns.boxplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='doc2vec'])
ax = sns.swarmplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='doc2vec'], color="0.25")
plt.show()
問題在於這會在另一個之上創建3個地塊。
如何生成這些相同的圖,但全部顯示在一條直線上,一個軸僅在最左側的圖上標記“相似度分數”,而在每個圖的正下方標記“反饋”軸標簽?
每次繪制時,您都在創建新的圖形。 因此,您可以刪除對plt.subplots()
所有調用,但只刪除其中之一
該seaborn swarmplot()
和boxplot()
接受ax
參數即你可以告訴它軸密謀。 因此,使用以下命令創建圖形,子圖和軸:
fig, (ax1, ax2, ax3) = plt.subplots(1, 3)
然后,您可以執行以下操作:
sns.boxplot(x="x_vals", y="y_vals", data=some_data, ax=ax1)
然后,您可以根據需要操縱軸。 例如,僅在某些子圖等上刪除y軸標簽。
fig, (ax1, ax2, ax3) = plt.subplots(1,3,figsize=(10,8))
sns.boxplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='tfidf'], ax=ax1)
sns.swarmplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='tfidf'], color="0.25", ax=ax1)
sns.boxplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='lda'], ax=ax2)
sns.swarmplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='lda'], color="0.25", ax=ax2)
ax2.set_ylabel("") # remove y label, but keep ticks
sns.boxplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='doc2vec'], ax=ax3)
sns.swarmplot(x="feedback", y="similarity_score", data=df[df.nlp_model=='doc2vec'], color="0.25", ax=ax3)
ax3.set_ylabel("") # remove y label, but keep ticks
plt.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.