[英]How to plot categorical data with seaborn setting the plot-style for each data column?
假設我有以下數據集:
import pandas as pd
import numpy as np
data = ([["Cheese", x] for x in np.random.normal(0.8, 0.03, 10)] +
[["Meat", x] for x in np.random.normal(0.4, 0.05, 14)] +
[["Bread", 0.8], ["Bread", 0.65]])
df = pd.DataFrame(data, columns=["Food", "Score"])
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="ticks", color_codes=True)
sns.set_context("paper")
sns.catplot(x="Score", y="Food", kind="box", data=df)
產生以下圖(或類似圖,取決於生成的隨機數):
我用我的實際數據繪制箱線圖的原因是,單個點與我想要顯示的類別數量相結合,使圖表在視覺上過於嘈雜,而這些方框給出了數據如何分布的一個很好的總體概述,即我在追求什么。 但是,問題在於“面包”類別之類的類別。
正如您所觀察到的,seaborn 為所有三個類別生成了帶有中位數、四分位數等的框。 但是,由於類別“面包”只有兩個數據點,因此對該類別使用箱線圖並不是真正合適的表示。 我更願意將此類別僅作為單個點。
但是,當查看https://seaborn.pydata.org/tutorial/categorical.html上的示例時,結合箱線圖和簡單點的唯一建議是為所有類別繪制兩者,這不是我所追求的。
簡而言之:如何使用 seaborn 繪制分類數據,為每個類別選擇適當的表示?
也許嘗試為面包而不是面包創建 df :
dfb = df[df['Food'].notnull() & (df['Food'] == 'Bread')]
dfnot_b = df[df['Food'].notnull() & (df['Food'] != 'Bread')]
然后添加另一個軸:
fig, ax = plt.subplots()
ax2 = ax.twinx()
嘗試不同的情節:
sns.boxplot(x="Score", y="Food", data=dfnot_b, ax=ax)
sns.stripplot(x="Score", y="Food", data=dfb, ax=ax2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.