countplot函数
countplot
是 Seaborn 库中的一个函数,用于绘制分类变量的计数或频率条形图。这个函数非常适合用来展示不同类别的频数,或者比较不同组别中的类别分布。
使用 countplot
的基本语法:
sns.countplot(x="分类变量", data=数据集, hue="分组变量")
sns.countplot(x="分类变量",order=['']) # x相当于数据集中的一列数据 order是轴显示顺序
x
:指定作为x轴的分类变量。data
:指定包含数据的DataFrame。hue
:可选参数,用于按另一个变量分组,以展示不同组别中的类别分布。
用法一
假设我们有一个名为 tips
的数据集,它包含了关于餐厅小费的信息,我们想要查看不同性别的顾客给小费的比例:
import seaborn as sns
import matplotlib.pyplot as plt
# 加载示例数据集
tips = sns.load_dataset('tips')
print(tips.columns)
Index([‘total_bill’, ‘tip’, ‘sex’, ‘smoker’, ‘day’, ‘time’, ‘size’], dtype=‘object’)
tips.shape
(244, 7)
tips.head(5)
tips.info()
# 绘制性别的计数图
sns.countplot(x='sex', data=tips)
# 添加标题
plt.title('顾客性别分布')
# 显示图形
plt.show()
如果你想要比较不同天的顾客性别分布,可以使用 hue
参数:
# 绘制不同天的顾客性别分布
sns.countplot(x='sex', hue='day', data=tips)
# 添加图例标题
plt.legend(title='星期几')
# 添加标题
plt.title('不同天的顾客性别分布')
# 显示图形
plt.show()
在这个例子中,countplot
会为每个类别(性别)绘制一个条形图,并且通过颜色区分不同的组别(星期几)。
请注意,countplot
默认情况下会将计数显示在y轴上,条形的高度代表每个类别的频数。如果你想要显示百分比而不是计数,可以使用 sns.catplot
函数,并设置 kind='count'
和 height
参数来创建一个更复杂的图表,其中y轴显示的是百分比。
用法二
display(level.value_counts())
sns.countplot(x=level,order=["一级","二级","三级","四级","五级","六级"])
AQI
二级 136
一级 103
三级 66
四级 14
五级 4
Name: count, dtype: int64
- x=level:这里 level 应该是你的数据集中的一个列名,表示你想要按此列的类别来绘制计数图。
order=["一级", "二级", "三级", "四级", "五级", "六级"]
:这个参数用于指定条形图中类别的显示顺序。如果不指定 order
参数,Seaborn 会按照类别在数据集中出现的顺序来绘制条形。
重复堆叠柱状图
数值小的柱状图部分会共同使用
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(12,6), dpi=100)#一行两列
# 柱状图
plt.subplot(121)
sns.countplot(x="gender",hue="Churn",data=tcc,palette="Blues", dodge=True)
plt.xlabel("Gender")
plt.title("Churn by Gender")
# 柱状堆叠图
plt.subplot(122)
sns.countplot(x="gender",hue="Churn",data=tcc,palette="Blues", dodge=False)
plt.xlabel("Gender")
plt.title("Churn by Gender")
plt.show()
以下是代码的详细解释:
sns.countplot:这是 seaborn 库中用于绘制计数图的函数。
x="gender":指定 x 参数为 "gender",这意味着 x 轴将显示 gender 列的类别。
hue="Churn":通过 hue 参数,您可以根据 Churn 列的值对 gender 列的类别进行颜色区分。
data=tcc:指定要绘制的数据来源为 tcc DataFrame。
palette="Blues":设置颜色方案为 "Blues",这是一个从浅蓝到深蓝的颜色渐变。
dodge=False:设置 dodge 参数为 False,这意味着不同 hue 值的条形图将堆叠在一起,而不是并排显示。如果设置为 True,则条形图会并排显示,以便更清楚地看到每个 gender 类别中 Churn 的分布。
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(12,6), dpi=100)#一行两列
# 柱状图
plt.subplot(121)
sns.countplot(x="gender",hue="Churn",data=tcc,palette="Blues", dodge=True)
plt.xlabel("Gender")
plt.title("Churn by Gender")
# 柱状堆叠图
plt.subplot(122)
sns.countplot(x="gender",hue="Churn",data=tcc,palette="Blues", dodge=False)
plt.xlabel("Gender")
plt.title("Churn by Gender")
patches = axes[1].patches
for patch in patches:
print(patch)
# 获取当前patch的x和y位置
x = patch.get_x() + patch.get_width() / 2
y = patch.get_height()
# 根据patch的索引确定是堆叠图中的哪一部分
if patch.get_label() == '_nolegend_' :
# 在柱子中间添加文本
axes[1].text(x, y/2, '{}'.format(int(patch.get_height())), ha='center', va='bottom',fontsize=15 )
plt.tight_layout()
plt.show()