簡體   English   中英

如何使用seaborn為每個數據列設置繪圖樣式來繪制分類數據?

[英]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.

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