首页 > 编程笔记 > Python笔记 阅读:2

Seaborn barplot():创建柱形图(附带实例)

在 Seaborn 中,可以使用 barplot() 函数创建柱形图。

创建基本柱形图

使用 barplot() 函数创建柱形图时,data 参数表示要绘制到柱形图中的所有数据,x 参数表示 data 参数中要用作 x 轴的数据,y 参数表示 data 参数中要用作 y 轴的数据。

barplot 函数的所有参数都是关键字参数,虽然可以不指定任何参数,但是此时创建的是一个空白图形。

创建柱形图最简单的方法是像 Matplotlib 中的 bar() 函数一样,分别指定要绘制到 x 轴和 y 轴的数据,这些数据都是序列对象类型。

下面的代码将创建如下图所示的柱形图:
import matplotlib.pyplot as plt
import seaborn as sns

x = range(1, 7)
y = [20, 50, 90, 60, 30, 70]

ax = sns.barplot(x=x, y=y)
plt.show()
效果如下图所示:


图 1 使用序列对象类型的数据创建柱形图

将上面的代码改写为以下形式,可以将 y 轴的刻度细化并显示完整:
import matplotlib.pyplot as plt
import seaborn as sns

x = range(1, 7)
y = [20, 50, 90, 60, 30, 70]

ax = sns.barplot(x=x, y=y)
ax.set_yticks(range(0, 101, 10))
plt.show()
效果如下图所示:


图 2 将y轴的刻度细化并显示完整

也可以使用字典对象作为创建图表的数据类型。在字典中包含要绘制到图表中的所有数据,将其作为 data 参数,还需要指定绘制到 x 轴和 y 轴的数据,将这两个参数的值设置为字典的某个键。

代码如下:
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style({'font.sans-serif': 'SimSun'})
month = range(1, 7)
counts = [20, 50, 90, 60, 30, 70]

data = dict(zip(['月份', '数量'], [month, counts]))
sns.barplot(data=data, x='月份', y='数量')
plt.show()
创建的柱形图如图 3 所示,此时会自动在图表中添加坐标轴标题。


图 3 使用字典对象类型的数据创建柱形图

可以将用作字典的键的两个名称保存到一个变量中,然后在后续的代码中使用该变量及其切片代替输入的字面值,修改后的代码如下:
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style({'font.sans-serif': 'SimSun'})
month = range(1, 7)
counts = [20, 50, 90, 60, 30, 70]
title = ['月份', '数量']

data = dict(zip(title, [month, counts]))
sns.barplot(data=data, x=title[0], y=title[1])
plt.show()
title[0] 返回列表中的第一个元素,即“月份”,title[1] 返回列表中的第二个元素,即“数量”。

还可以使用 Pandas 中的 Series 对象或 DataFrame 对象作为创建图表的数据类型,这种方式在使用 Pandas 中的 read_csv 和 read_excel 等函数从文件中读取数据后创建图表时比较方便,因为这类函数的返回值就是 DataFrame 对象类型。

下面的代码是使用 Series 对象和 DataFrame 对象类型的数据创建柱形图,此时需要使用 import 语句导入 Pandas 库。
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

sns.set_style({'font.sans-serif': 'SimSun'})
month = pd.Series(range(1, 7))
counts = pd.Series([20, 50, 90, 60, 30, 70])

data = pd.DataFrame(dict(zip(['月份', '数量'], [month, counts])))
sns.barplot(data=data, x='月份', y='数量')
plt.show()

调整柱形图中柱形的排列顺序

为 barplot() 函数指定 order 参数,可以调整柱形图中柱形的排列顺序。

下面的代码将在柱形图中先显示 1、3、5 月的数据,再显示 2、4、6 月的数据:
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style({'font.sans-serif': 'SimSun'})
month = range(1, 7)
counts = [20, 50, 90, 60, 30, 70]
title = ['月份', '数量']
month_new = [1, 3, 5, 2, 4, 6]

data = dict(zip(title, [month, counts]))
sns.barplot(data=data, x=title[0], y=title[1], order=month_new)
plt.show()
效果如下图所示:


图 4 调整柱形的排列顺序

将柱形图转换为条形图

使用 barplot() 函数也可以创建条形图,此时需要为该函数指定 orient 参数,并将其值设置为 h,同时需要将 x 参数和 y 参数的值对调。

分析下面的代码:
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style({'font.sans-serif': 'SimSun'})
month = range(1, 7)
counts = [20, 50, 90, 60, 30, 70]
title = ['月份', '数量']

data = dict(zip(title, [month, counts]))
sns.barplot(data=data, x=title[1], y=title[0], orient='h')
plt.show()
创建如下图所示的条形图,x 轴显示数量,y 轴显示月份。


图 5 条形图

相关文章