Seaborn barplot():创建柱形图(附带实例)
在 Seaborn 中,可以使用 barplot() 函数创建柱形图。
barplot 函数的所有参数都是关键字参数,虽然可以不指定任何参数,但是此时创建的是一个空白图形。
创建柱形图最简单的方法是像 Matplotlib 中的 bar() 函数一样,分别指定要绘制到 x 轴和 y 轴的数据,这些数据都是序列对象类型。
下面的代码将创建如下图所示的柱形图:

图 1 使用序列对象类型的数据创建柱形图
将上面的代码改写为以下形式,可以将 y 轴的刻度细化并显示完整:

图 2 将y轴的刻度细化并显示完整
也可以使用字典对象作为创建图表的数据类型。在字典中包含要绘制到图表中的所有数据,将其作为 data 参数,还需要指定绘制到 x 轴和 y 轴的数据,将这两个参数的值设置为字典的某个键。
代码如下:

图 3 使用字典对象类型的数据创建柱形图
可以将用作字典的键的两个名称保存到一个变量中,然后在后续的代码中使用该变量及其切片代替输入的字面值,修改后的代码如下:
还可以使用 Pandas 中的 Series 对象或 DataFrame 对象作为创建图表的数据类型,这种方式在使用 Pandas 中的 read_csv 和 read_excel 等函数从文件中读取数据后创建图表时比较方便,因为这类函数的返回值就是 DataFrame 对象类型。
下面的代码是使用 Series 对象和 DataFrame 对象类型的数据创建柱形图,此时需要使用 import 语句导入 Pandas 库。
下面的代码将在柱形图中先显示 1、3、5 月的数据,再显示 2、4、6 月的数据:

图 4 调整柱形的排列顺序
分析下面的代码:

图 5 条形图
创建基本柱形图
使用 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 条形图