数据分析之Matplotlib

本文介绍了Python数据分析库Matplotlib的两种子图绘制方法——状态编程接口和面向对象编程接口,通过实例展示了如何创建规则与不规则子图。同时,详细阐述了坐标轴参数的设置,包括标题、刻度、标签、范围的调整,以及中文显示的方法。适合Python数据可视化初学者参考。
摘要由CSDN通过智能技术生成

项目场景:

本文主要介绍python数据分析可视化库Matplotlib的一些常见问题,后续会不断补充增加。


一. 关于子图绘制:

A.Pyplot编程接口绘制子图(state-based)

Pyplot编程接口(state-based),
1.类似MATLAB风格,利用plt创建Axes对象(此时也自动创建了Figure,可以使用plt.figure(figsize=())来制定图的大小);
2.具有状态属性,未指明图的次序(也就是plt.subplot()未使用),将默认在最后一个坐标系上绘图;

1.规则子图绘制
代码如下(示例):

import matplotlib.pyplot as plt
import numpy as np
#未指明图的大小,使用默认图大小
for i in range(4):
    plt.subplot(221+i)
    plt.plot(np.arange(1,6))
plt.show()

在这里插入图片描述

2.不规则子图绘制
代码如下(示例):

import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(12, 6))#指明图的大小
plt.subplot(221)
plt.plot(np.arange(6))
plt.subplot(222)
plt.plot(np.arange(6))
plt.subplot(212)
plt.plot(np.arange(6))
plt.show()

在这里插入图片描述
代码如下(示例):

import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(12, 6))#指明图的大小
plt.subplot(311)
plt.plot(np.arange(6))
plt.subplot(312)
plt.plot(np.arange(6))
plt.subplot(313)
plt.plot(np.arange(6))
plt.show()

在这里插入图片描述
总结规律:

  • plt.subplot(221)是将图四等分(2*2)选取第一个,同理plt.subplot(222)则为四等份中的第二个;
  • plt.subplot(212)将图两等分(2*1),选择第二个;
  • plt.subplot(abc),a和b代表图分成的份数,c代表次序;

B.面向对象编程接口绘制子图(object-based)

面向对象编程接口绘图即每个图都基于一个对象(Axes坐标系对象),相比于pyplot接口,需要我们自己创建画布(FigureCanvas),我们自己创建图对象(Figure),我们自己创建Axes,所有对象一起才能完成一次完整的绘图

import matplotlib.pyplot as plt
import numpy as np
#使用plt.subplots()指定图的大小和坐标系的数目,并指明图的大小
fig, axes = plt.subplots(2, 2,figsize=(12, 8), dpi=72)
#依次生成子图对象
ax1 = axes[0, 0]
ax2 = axes[0, 1]
ax3 = axes[1, 0]
ax4 = axes[1, 1]
#绘制图像
ax2.plot(np.arange(4))
ax4.scatter(np.arange(4), np.arange(4))
plt.show()

在这里插入图片描述

  • subplots方法最好使用axes方法绘图,它是先搭框架再绘图;而subplot方法则是通过代码块一步步绘图,逻辑非常清晰,并且在代码块中可以使用plt方法;
  • 代码示例均以绘制简单子图为例,读者可以根据需求添加图像的其他元素

二. 关于坐标轴参数设置:

fig, ax = plt.subplots(1, 1,figsize=(8, 6), dpi=100)
#用于设置图的标题
ax.set_title("Anatomy of a figure", fontsize=20, verticalalignment='bottom')
#选择‘major’,使两个坐标轴的都显示出刻度,并且设置width和length 
ax.tick_params(which='major', width=1.0)
ax.tick_params(which='major', length=10)
#用于设置x轴的最大分度值
ax.xaxis.set_major_locator(MultipleLocator(10.000))
#用于设置x轴的最小分度值,‘4’代表将10等分成4份,一份2.5
ax.xaxis.set_minor_locator(AutoMinorLocator(4))
#用于设置y轴的最大分度值
ax.yaxis.set_major_locator(MultipleLocator(10.000))
#用于设置y轴的最小分度值,‘4’代表将10等分成4份,一份2.5
ax.yaxis.set_minor_locator(AutoMinorLocator(4))
#用于设置x轴的标签
ax.set_xlabel("X axis label")
#用于设置y轴的标签
ax.set_ylabel("Y axis label")
#用于设置x轴的范围
ax.set_xlim(0, 100)
#用于设置y轴的范围
ax.set_ylim(0, 150)
#用于显示图例
ax.legend()

三. 关于中文显示:

plt.rcParams['font.sans-serif'] = ['SimHei'] 
plt.rcParams['axes.unicode_minus'] = False

未完待续!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值