繁体   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