PyR*_*red 7 python data-visualization matplotlib 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
....
Run Code Online (Sandbox Code Playgroud)
我想对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()
Run Code Online (Sandbox Code Playgroud)
问题是这会创建 3 个图,一个在另一个之上。
如何生成这些相同的图但都在一条线上,一个轴仅在最左侧的图上标记“相似度得分”,而每个图正下方的“反馈”轴标签?
Dav*_*idG 14
每次绘制时,您都在创建新图形。所以你可以删除除了一个调用之外的所有调用plt.subplots()
seabornswarmplot()和boxplot()acceptax参数,即您可以告诉它要绘制到哪些轴。因此,使用以下方法创建图形、子图和轴:
fig, (ax1, ax2, ax3) = plt.subplots(1, 3)
Run Code Online (Sandbox Code Playgroud)
然后你可以做这样的事情:
sns.boxplot(x="x_vals", y="y_vals", data=some_data, ax=ax1)
Run Code Online (Sandbox Code Playgroud)
然后,您可以根据需要操作轴。例如,仅在某些子图上删除 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22034 次 |
| 最近记录: |