Seaborn 柱状图

Seaborn 柱状图函数

在 Seaborn 中,我们可以使用 barplot() 函数来绘制一个柱状图。柱状图的主要作用是:展示数据的大小,并比较不同类别之间的数值。

柱状图适用于比较不同类别之间的数值大小,它在以下情况下特别有用。

  • 比较不同类别的数值。
  • 显示随时间变化的数值。
  • 分析分类数据。

不过柱状图也存在以下的局限性。

  • 不适合显示连续变量之间的关系。
  • 当类别过多时,柱状图会变得难以阅读。

语法:

sns.barplot(data, x, y)

说明:

barplot() 函数接收以下主要参数。

  • data(可选):用于定义数据部分,它是一个 DataFrame。
  • x(可选):用于指定 DataFrame 的哪一列作为 x 轴坐标。
  • y(可选):用于指定 DataFrame 的哪一列作为 y 轴坐标。

barplot() 函数根据提供的 x 和 y 值绘制柱状图。如果 x 是分类变量,y 是数值变量,则柱状图显示每个类别的 y 的聚合值(默认情况下是平均值)。

提示: 与柱状图类似的是直方图,另请参阅:Seaborn 直方图

示例 1:Seaborn 绘制柱状图

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 设置
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})

# 数据
data = [
    ['1月', 468],
    ['2月', 521],
    ['3月', 362],
    ['4月', 227],
    ['5月', 438],
    ['6月', 550]
]
df = pd.DataFrame(data, columns=['月份', '销量'])
# 绘图
sns.barplot(data=df, x='月份', y='销量')

# 显示
plt.show()

运行之后,效果如下图所示。

Seaborn 柱状图

分析:

sns.barplot(data=df, x='月份', y='销量') 表示指定 “月份” 这一列数据作为 x 轴坐标,并且指定 “销量” 这一列数据作为 y 轴坐标。

对于柱状图来说,它的 x 轴坐标可以是数字也可以是字符串。但是 y 轴坐标要求一定是数字,毕竟柱状图的作用就是展示数据的大小嘛。

Seaborn 柱状图案例

Seaborn 内置了一个数据集 tips,该数据集保存的是某餐厅的营业情况,包括账单、小费、客人信息等,部分内容如下图所示。需要说明的是,“size” 这一列指的是客人订的餐桌类型,比如有些是 2 人桌、有些是 3 人桌等。

Seaborn tips 数据集

示例 2:基本柱状图

import matplotlib.pyplot as plt
import seaborn as sns

# 设置
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})

# 加载内置数据集
df = sns.load_dataset('tips')
# 重命名列
column_map = {
    'total_bill': '账单',
    'tip': '小费',
    'sex': '性别',
    'smoker': '是否吸烟',
    'day': '星期',
    'time': '餐段',
    'size': '人数'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.barplot(data=df, x='星期', y='账单')

# 显示
plt.show()

运行之后,效果如下图所示。

Seaborn 基本柱状图

分析:

对于这个例子来说,x 轴坐标是 “星期”,取值共有 4 种:Thur(周四)、Fri(周五)、Sat(周六)、Sun(周日)。然后 y 轴坐标是 “账单”。有小伙伴可能会觉得很奇怪,“账单” 这个数值是怎么来的呢?

实际上,这里的 “账单” 取的是平均值。比如 “Thur(周四)” 对应的 “账单”,就是将所有Thur(周四)的账单进行求平均值。

示例 3:改变方向

import matplotlib.pyplot as plt
import seaborn as sns

# 设置
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})

# 加载内置数据集
df = sns.load_dataset('tips')
# 重命名列
column_map = {
    'total_bill': '账单',
    'tip': '小费',
    'sex': '性别',
    'smoker': '是否吸烟',
    'day': '星期',
    'time': '餐段',
    'size': '人数'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.barplot(data=df, y='星期', x='账单')

# 显示
plt.show()

运行之后,效果如下图所示。

Seaborn 柱状图改变方向

分析:

对于 barplot() 函数来说,我们只需要将 x 和 y 这两个参数的取值调换一下,就可以改变方向了。

示例 4:添加区分

import matplotlib.pyplot as plt
import seaborn as sns

# 设置
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})

# 加载内置数据集
df = sns.load_dataset('tips')
# 重命名列
column_map = {
    'total_bill': '账单',
    'tip': '小费',
    'sex': '性别',
    'smoker': '是否吸烟',
    'day': '星期',
    'time': '餐段',
    'size': '人数'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.barplot(data=df, x='星期', y='账单', hue='性别')

# 显示
plt.show()

运行之后,效果如下图所示。

Seaborn 柱状图添加区分

分析:

和折线图一样,如果想要给柱状图添加类别区分,我们也可以使用 hue 参数来实现。需要注意的是,对于 barplot() 函数,我们只能使用 hue 参数,而不能使用 style 或 size 参数。

原因很简单,柱状图根据颜色进行区分,这个是没有问题的。但是它是没办法通过形状(style)或大小(size)来进行区分的。也就是说,barplot() 函数只有 hue 参数,不存在 style 和 size 这 2 个参数。

示例 5:分开显示

import matplotlib.pyplot as plt
import seaborn as sns

# 设置
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})

# 加载内置数据集
df = sns.load_dataset('tips')
# 重命名列
column_map = {
    'total_bill': '账单',
    'tip': '小费',
    'sex': '性别',
    'smoker': '是否吸烟',
    'day': '星期',
    'time': '餐段',
    'size': '人数'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.barplot(data=df, x='星期', y='账单', hue='是否吸烟')

# 显示
plt.show()

运行之后,效果如下图所示。

Seaborn 柱状图分开显示

分析:

当我们使用 hue 参数添加区分之后,就会在同一列中使用不同的柱条来显示。如果想要在同一个柱条中显示,我们可以设置 dodge 参数的值为 False。修改后的代码如下,此时效果如下图所示。

sns.barplot(data=df, x='星期', y='账单', hue='是否吸烟', dodge=False)

Seaborn 柱状图合并显示

需要注意的是,当左边柱条比右边柱条高时,那么左边柱条就会把右边柱条给 “遮住”。所以在实际开发中,这种合并显示的效果并不是很好。

Seaborn 带误差棒的柱状图

细心的小伙伴可能都发现了,barplot() 函数绘制的柱状图中每一个柱条中间都有一个棒条,实际上这就是一个 “带误差棒的柱状图”。

误差棒(error bar)用于表示数据的不确定性或变异性。它通常以柱状图上的垂直线段表示,显示数据的置信区间、标准差或标准误差。误差棒可以帮助我们评估数据的可靠性,并判断不同组之间的差异是否具有统计学意义。

在 barplot() 函数中,用于定义误差棒样式的参数有 2 个,如下表所示。

误差棒样式参数
参数 说明
err_kws 棒条样式(颜色、宽度等)
capsize 横杠大小

示例 6:带误差棒的柱状图

import matplotlib.pyplot as plt
import seaborn as sns

# 设置
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})

# 加载内置数据集
df = sns.load_dataset('tips')
# 重命名列
column_map = {
    'total_bill': '账单',
    'tip': '小费',
    'sex': '性别',
    'smoker': '是否吸烟',
    'day': '星期',
    'time': '餐段',
    'size': '人数'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.barplot(data=df, x='星期', y='账单', err_kws={'color': 'purple'})

# 显示
plt.show()

运行之后,效果如下图所示。

Seaborn 带误差棒的柱状图

分析:

err_kws={'color': 'purple'} 表示定义棒条颜色为 purple(紫色)。当然了,我们也可以使用 err_kws 这个参数来改变棒条的宽度。修改后的代码如下,此时效果如下图所示。

sns.barplot(data=df, x='星期', y='账单', err_kws={'linewidth': 4, 'color': 'purple'})

Seaborn 柱状图改变误差棒的宽度

如果想要添加一个横杠,我们只需要给 capsize 参数一个数值就可以了。修改后的代码如下,效果如下图所示。

sns.barplot(data=df, x='星期', y='账单', capsize=0.2)

Seaborn 柱状图为误差棒添加横杆

最后,我们来总结一下 barplot() 函数的参数,常用的如下表所示。

barplot() 函数的参数
参数 说明
data 数据部分
x x 轴坐标
y y 轴坐标
hue 添加区分
order 改变顺序
dodge 合并显示
err_kws 棒条样式
capsize 横杠大小

上一篇: Seaborn 散点图

下一篇: Seaborn 直方图

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号