前言
matplotlib 库是一个非常强劲的 Python 的2D 绘图库。其中 pyplot 库是 matplotlib 的基于状态的接口。它提供了类似于 MATLAB 的绘图方式。pyplot 主要用于交互式绘图和程序化绘图生成的简单情况。
导入matplotlib库
import matplotlib.pyplot as plt #导入matplotlib库进行绘图
import numpy as np #导入numpy库用以生成数据
#导入seaborn库用于让matplotlib有更好的绘制体验,seaborn库会更改底matplotlib库设置
import seaborn as sns
plt.bar函数
bar函数用以绘制柱状图,适用场合是二维数据集(每个数据点包括两个值x和y),但只有一个维度需要比较,用于显示一段时间内的数据变化或显示各项之间的比较情况。
优势:因为肉眼对高度差异很敏感,柱状图利用柱子的高度,反映数据的差异。
劣势:柱状图的局限在于只适用中小规模的数据集。
其函数原型如下:
def bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
参数详解:
- 参数1:x : 标量型,指定x的坐标
- 参数2:height:指定柱形图的高度,一般就是我们需要展示的数据的大小
- 参数3:width:标量型,指定柱形图的宽度,一般0.8即可
- 参数4:bottom:标量或标量类数组型,指定y坐标的起始高度
- 参数5:align:指定对齐方式,可以指定中心对称或者边缘对称;
- 参数6:kwargs:接收的关键字参数传递给关联的Rectangle。
- 返回值:BarContainer实例,其patches属性是柱体的列表。
参数指定
bar 函数绘制柱状图的时候可以有两种设置方式:第一种是在绘图调用 bar 函数的时候直接指定参数从而设置属性。第二种方法是绘图完毕后对返回的 Rectangle 实例进行属性设置:
画图的时候直接指定参数
patch = plt.bar(
x=np.arange(0, 20), #指定柱体X坐标
height=np.random.randint(0, 100, 20), #指定主体高度
width=0.8, #指定柱体宽度:0.8
bottom=0.0, #指定柱体高度起始值:0.0
align='center', #指定对齐方式:'center'
alpha=0.5, #指定透明度:0.5
color='#BC8F8F', #指定柱体颜色:'#BC8F8F'
edgecolor='#BC8F8F', #指定边缘颜色:'#BC8F8F'
lw=1.0, #指定边缘线宽:1.0
linestyle=None, #指定边缘线条样式:None
capstyle='butt', #指定笔帽样式:'butt'
fill=True, #指定填充柱体
joinstyle='miter', #指定柱体边角连接模式:'miter'
hatch=None, #指定柱体阴影:None
antialiased=True, #指定进行抗锯齿
label='随机生成0到100之间的20个整数bar示例', #指定图例的显示内容
)
plt.title('bar示例', fontsize=20) #指定绘图标题
plt.legend() #打开图例
plt.grid(True) #打开网格
plt.xlabel('X', fontsize=20) #指定X坐标轴标题
plt.ylabel('Y', fontsize=20) #指定Y坐标轴标题
plt.show()
画图结果如下:
使用set_property方法
每一个 Artist 对象都可以使用 set_property
方法设置属性,示例代码如下:
patch[0].set_linewidth(15)
patch[0].set_facecolor('#000000')
画图结果如下:
应用
示例1添加柱体标签
使用反馈设置方法最大的用处在于自动添加柱体标签,自动添加标签的代码如下:
# 柱状图自动添加标签
def autolabel(self, rects):
"""
自动标定柱状图柱体高度
rects:要进行标定的Rectangle类列表
"""
for rect in rects:
height = rect.get_height()
plt.annotate(format(height, '.2f'),
xy=(rect.get_x() +
rect.get_width() / 2, height),
xytext=(0, 2), # 垂直偏移两格
textcoords="offset points",
ha='center',
va='bottom')
传递一个包含Rectangle类的列表作为参数从而进行自动添加标签。
不同参数的影响
不同参数的可视化区如下图所示:
程序代码如下:
X = np.arange(0, 20, 2)
Y = 2*X+3
plt.figure(figsize=(12, 10))
#原始图像
ax = plt.subplot(331)
rects = plt.bar(X, Y, width=0.8, edgecolor='#FF0000')
ax.set_title('width=0.8')
autolabel(rects=rects)
#更改bottom属性
ax = plt.subplot(332)
rects = plt.bar(X, Y, width=0.8, bottom=10, edgecolor='#FF0000')
ax.set_title('bottom=10')
autolabel(rects=rects)
#更改align属性
ax = plt.subplot(333)
rects = plt.bar(X, Y, width=0.8, align='edge', edgecolor='#FF0000')
ax.set_title('align=edge')
autolabel(rects=rects)
#更改lw属性
ax = plt.subplot(334)
rects = plt.bar(X, Y, width=0.8, lw=2, edgecolor='#FF0000')
ax.set_title('lw=2')
autolabel(rects=rects)
#更改hatch属性
ax = plt.subplot(335)
rects = plt.bar(X, Y, width=0.8, hatch='o', edgecolor='#FF0000')
ax.set_title('hatch=o')
autolabel(rects=rects)
#更改alpha属性
ax = plt.subplot(336)
rects = plt.bar(X, Y, width=0.8, alpha=0.3, edgecolor='#FF0000')
ax.set_title('alpha=0.3')
autolabel(rects=rects)
#更改edgecolor属性
ax = plt.subplot(337)
rects = plt.bar(X, Y, width=0.8, edgecolor='#FF0FF0')
ax.set_title('edgecolor=#FF0FF0')
autolabel(rects=rects)
#更改facecolor属性
ax = plt.subplot(338)
rects = plt.bar(X, Y, width=0.8, facecolor='#FFF000', edgecolor='#FF0000')
ax.set_title('facecolor=#FFF0000')
autolabel(rects=rects)
#更改joinstyle属性
ax = plt.subplot(339)
rects = plt.bar(X, Y, width=0.8, joinstyle='bevel', edgecolor='#FF0000')
ax.set_title('joinstyle=bevel')
autolabel(rects=rects)
plt.show()
往期回顾
- 【matplotlib】可视化解决方案——如何向画布中添加坐标轴
- 【matplotlib】可视化解决方案——如何正确使用matplotlib颜色系统
- 【matplotlib】可视化解决方案——如何实现画布局部放大功能
- 【matplotlib】可视化解决方案——如何更改matplotlib配置信息
- 【matplotlib】可视化解决方案——如何定制化网格
- 【matplotlib】可视化解决方案——如何向画布添加交叉直线
- 【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题
- 【matplotlib】可视化解决方案——如何设置matplotlib风格集
- 【matplotlib】可视化解决方案——如何设置轴标签的透明度和大小
- 【matplotlib】可视化解决方案——如何向图表中添加数据表
文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!如果觉得我的文章写得还行,不妨支持一下。你的每一个转发、关注、点赞、评论都是对我最大的支持!