Matplotlib绘制柱状图

利用matplotlib绘制柱状图

柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其所表示的数值成正比关系。柱状图显示了不同类别之间的比较关系,图表的水平轴 X 指定被比较的类别,垂直轴 Y 则表示具体的类别值。

绘制柱状图的命令为:

bar()

1.简单柱状图绘制

下面从建造一个简单的柱状图开始,代码如下

import matplotlib.pyplot as plt
data = [5, 20, 15, 25, 10]
plt.bar(range(len(data)), data)
plt.show() # 显示图形

2.修改x轴的标签

假设数据为选课的学生人数,那么横轴就是每个科目(subject),我们可以通过如下方式修改x轴的标签(数学(math),语文(language),英语(english),体育(sport),政治(politics))。

import matplotlib.pyplot as plt
data = [5, 10, 20, 15, 25]
subject = ['math', 'language', 'english', 'sports', 'politics']
plt.bar(subject, data)
plt.show()

也可以通过xticks函数修改,参考下方绘制并列柱状图例子。

3.设置柱体颜色

(1)一次性改变一个颜色

通过 facecolor(fc) 参数可以设置柱体颜色,比如将柱体设置成红色:

import matplotlib.pyplot as plt
data = [5, 10, 20, 15, 25]
subject = ['math', 'language', 'english', 'sports', 'politics']
plt.bar(subject, data, fc='r') 
plt.show()
(2)一次性改变多个颜色

也可以通过 color 参数一次性设置多个颜色

import matplotlib.pyplot as plt
data = [5, 10, 20, 15, 25]
subject = ['math', 'language', 'english', 'sports', 'politics']
plt.bar(subject, data, color=['r', 'b', 'y']) # 目前pyhton3.9版本不支持写成{color=’rby‘}
plt.show()

4.柱状图的美化

(1)柱状图内部填充

hatch='' 可设置填充图案,如/,-,+,o,O,.等

import matplotlib.pyplot as plt
data = [5, 10, 20, 15, 25]
subject = ['math', 'language', 'english', 'sports', 'politics']
plt.bar(subject, data, color=['r', 'b', 'y'], hatch='/') 
plt.show()
(2)添加柱状图的边框

相关的关键字参数为:edgecolor (ec),linestyle ( ls),linewidth (lw)

import matplotlib.pyplot as plt
data = [5, 10, 20, 15, 25]
subject = ['math', 'language', 'english', 'sports', 'politics']
plt.bar(subject, data, color=['r', 'b', 'y'], hatch='/', ec='g', ls='-', lw=5)
plt.show()

ec参数选择边框颜色,ls参数选择边框样式,lw参数调整边框宽度。

5.绘制并列柱状图

主要需要控制好每个柱之间的距离,比如:

import numpy as np
import matplotlib.pyplot as plt  # 导入所需库
# 导入数据
x = np.arange(5)
x1 = [59, 82, 75, 65, 72]
x2 = [68, 82, 77, 89, 61]
x3 = [90, 71, 86, 53, 62]  
# 设置所需参数
total_width, n = 0.8, 3  # (柱状图的默认宽度值为 0.8)
width = total_width / n
x = x - (total_width - width) / 2  # 现在的x是每个并列柱的第一柱的中心横坐标
# 绘制图
plt.bar(x, x1,  width=width, label='language', fc='b')
plt.bar(x + width, x2, width=width, label='math', fc='r')
plt.bar(x + 2 * width, x3, width=width, label='english', fc='y')
plt.xticks(np.arange(5), ['tom', 'jack', 'bob', 'jone', 'lucy'])  # 将横坐标修改为学生姓名
plt.legend()  # 添加图例
plt.show()

也可以通过

plt.ylabel('') # 添加y轴标签
plt.title('') # 添加图标题

进而完善图形,这里就不进行演示了

6.绘制堆叠柱状图

可以通过 bottom 参数绘制堆叠柱状图。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(3)
x1 = np.random.random(3)
x2 = np.random.random(3)

# 中文乱码处理
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 坐标轴负号处理
plt.rcParams['axes.unicode_minus'] = False

plt.bar(x, x1, label='语文')
plt.bar(x, x2, bottom=x1, label='数学')
plt.legend()
plt.show()

7.绘制条形图

barh方法绘制条形图,其剩余画图方法与柱状图类似

import matplotlib.pyplot as plt

data = [36, 27, 15, 29, 10]
plt.barh(range(len(data)), data)
plt.show()