matplotlib画图

matplotlib图像通常会包括以下四个层级,这些层级也被称为容器(container),在matplotlib的世界中,我们将通过各种命令方法来操纵图像中的每一个部分,从而达到数据可视化的最终效果,一副完整的图像实际上是各类子元素的集合。
Figure:顶层级,用来容纳所有绘图元素
Axes:matplotlib宇宙的核心,容纳了大量元素用来构造一幅幅子图,一个figure可以由一个或多个子图组成
Axis:axes的下属层级,用于处理所有和坐标轴,网格有关的元素
Tick:axis的下属层级,用来处理所有和刻度有关的元素

在这里插入图片描述

  • matplotlib提供了两种最常用的绘图接口
    • 显式创建figure和axes,在上面调用绘图方法,也被称为OO模式(object-oriented style)
    • 依赖pyplot自动创建figure和axes,并绘图
# 1.1显式创建创建figure和axes
fig, ax = plt.subplots()  
ax.plot(x, x, label='linear') 
# 1.2标准案例
# 创建一个Figure实例
fig = plt.figure()
# 使用Figure实例创建一个或者多个Axes或Subplot实例
ax = fig.add_subplot(2, 1, 1)
# 使用Axes实例的辅助方法来创建primitive
t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax.plot(t, s, color='blue', lw=2)
# 2 依赖pyplot自动创建figure和axes
plt.plot(x, x, label='linear') 
  • 改变字体
#该block讲述如何在matplotlib里面,修改字体默认属性,完成全局字体的更改。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimSun']    # 指定默认字体为新宋体。
plt.rcParams['axes.unicode_minus'] = False      # 解决保存图像时 负号'-' 显示为方块和报错的问题。
  • 构建均匀子图
    使用 plt.subplots 绘制均匀状态下的子图,返回元素分别是画布和子图构成的列表,第一个数字为行,第二个为列。
    • figsize 参数可以指定整个画布的大小
    • sharex 和 sharey 分别表示是否共享横轴和纵轴刻度
    • tight_layout 函数可以调整子图的相对大小使字符不会重叠
fig, axs = plt.subplots(2, 5, figsize=(10, 4), sharex=True, sharey=True)
fig.suptitle('样例1', size=20)
for i in range(2):
    for j in range(5):
        axs[i][j].scatter(np.random.randn(10), np.random.randn(10))
        axs[i][j].set_title('第%d行,第%d列'%(i+1,j+1))
        axs[i][j].set_xlim(-5,5)
        axs[i][j].set_ylim(-5,5)
        if i==1: axs[i][j].set_xlabel('横坐标')
        if j==0: axs[i][j].set_ylabel('纵坐标')
fig.tight_layout()
  • 构建非均匀子图
    利用 add_gridspec 可以指定相对宽度比例 width_ratios 和相对高度比例参数 height_ratios,把得到的对象放入fig.add_subplot()中,可以得到非均匀子图的axes,其中add_subplot函数中的sharex与sharey参数值需要是其他子图的axes对象。
fig = plt.figure(figsize=(10, 4))
spec = fig.add_gridspec(nrows=2, ncols=5, width_ratios=[1,2,3,4,5], height_ratios=[1,3])
fig.suptitle('样例2', size=20)
for i in range(2):
    for j in range(5):
        ax = fig.add_subplot(spec[i, j])
        ax.scatter(np.random.randn(10), np.random.randn(10))
        ax.set_title('第%d行,第%d列'%(i+1,j+1))
        if i==1: ax.set_xlabel('横坐标')
        if j==0: ax.set_ylabel('纵坐标')
fig.tight_layout()

还可以通过gridspec切片就可以实现子图的合并而达到跨图的功能

ax = fig.add_subplot(spec[0, :3])
  • 隐藏坐标轴和边框
# 隐藏坐标轴
ax.get_yaxis().set_visible(False)
ax.get_xaxis().set_visible(False)
# 隐藏边框
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
  • 改变样式
print(plt.style.available)
plt.style.use('ggplot')
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值