【数据操作与可视化】Matplotlib绘图-常用操作
1、自定义刻度和风格
ini
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制图像
plt.plot(x, y_shanghai)
# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)
# 2.4 图像保存
plt.savefig("./test.png")
# 3.图像显示
plt.show()

2、在同一个坐标系中多次绘制
需求:再添加一个城市的温度变化。 收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条,如下显示:
ini
# 增加北京的温度数据
y_beijing = [random.uniform(5, 8) for i in x]
# 绘制折线图
plt.plot(x, y_shanghai)
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')

3、图形风格
| 颜色字符 | 线条风格字符 |
|---|---|
| r 红色 | - 实线 |
| g 绿色 | - - 虚线 |
| b 蓝色 | -. 点划线 |
| w 白色 | : 点虚线 |
| c 青色 | ' ' 留空、空格 |
| m 洋红 | 等 |
| y 黄色 | |
| k 黑色 |

图例的显示位置: plt.legend(loc="best" 或 loc=0) :
| Location String | Location Code |
|---|---|
| 'best' | 0 |
| 'upper right' | 1 |
| 'upper left' | 2 |
| 'lower left' | 3 |
| 'lower right' | 4 |
| 'right' | 5 |
| 'center left' | 6 |
| 'center right' | 7 |
| 'lower center' | 8 |
| 'upper center' | 9 |
| 'center' | 10 |
4、绘制子图
一个绘图对象可以包含多个轴,在matplotlib中用轴表示一个绘图区域,可以将其理解为子图。不特别指定,绘图对象只包括一个轴,因此只显示了一个轴(子图Axes)。
可以使用fig对象的add_subplot方法和plt.subplot方法绘制多个轴的图表。
ini
import matplotlib.pyplot as plt
from pylab import mpl
import numpy as np
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = np.linspace(0, 10, 100) # 0到10之间的所有数据,分成100个组
y = np.sin(x)
z = np.cos(x**2)
# 生成默认的画布,并利用该画布生成两个子图
fig = plt.figure(figsize=(8,4), dpi=100)
fig.add_subplot(2,1,1) # 三个参数分别代表:2行,1列,第1个子图
# 在第一个子图上进行绘制
plt.title('正弦信号')
plt.xlabel('时间')
plt.ylabel('电压')
plt.xlim(-1, 11)
plt.ylim(-1.2, 1.2)
plt.xticks(np.arange(0, 11, 2))
plt.yticks([-1, -0.5, 0, 0.5, 1])
plt.plot(x, y, label='sin(x)')
plt.legend(loc=0)
plt.subplots_adjust(wspace=0, hspace=0.7) # 调整子图之间的距离
# 第二个子图
fig.add_subplot(2,1,2) # 创建第二个子图
plt.title('余弦信号')
plt.xlabel('时间')
plt.ylabel('电压')
plt.xlim(-1, 11)
plt.ylim(-1.2, 1.2)
plt.xticks(np.arange(0, 11, 2))
plt.yticks([-1, -0.5, 0, 0.5, 1])
plt.plot(x, z, 'm--', label='cos(x)')
plt.legend(loc=0)
plt.show()
5、添加说明和注释
添加文字说明主要用到方法text,注释可以使用annotate方法。
ini
import matplotlib.pyplot as plt
from pylab import mpl
import numpy as np
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = np.linspace(0, 10, 100) # 0到10之间的所有数据,分成100个组
y = np.sin(x)
z = np.cos(x)
# 绘图设置
plt.figure(figsize=(8, 5), dpi=100) # 宽度和高度(英寸),dpi,每英寸像素值
plt.title('正余弦信号', color='red', fontsize=20, rotation=0, alpha=1) # 添加标题,rotation角度旋转,alpha透明度
plt.xlabel('时间', fontsize=15, color='k', rotation=0) ## 设置x和y轴的名称
plt.ylabel('电压', fontsize=15)
plt.xlim(-1, 11) # 设置x和y轴的范围
plt.ylim(-1.2, 1.2)
plt.xticks(np.arange(0, 12, 2), fontsize=15, rotation=0) # 设置x和y周的刻度
plt.yticks([-1, -0.5, 0, 0.5, 1])
plt.plot(x, y, color='blue', linewidth=2, label='sin(x)') # 绘图
plt.plot(x, z, 'r--', label='cos(x)') # r红色,--表示线型
plt.legend(loc=0)
# 添加文字说明。0,0表示文字的坐标位置
plt.text(0, 0, '零点', fontsize=10, rotation=0, color='r')
# 添加注释。xy指要添加注释的点,xytext是指注释文字的位置,可以自由指定。也可以添加多个注释
plt.annotate('最大值', color='r', xy=(1.87, 1),
xytext=(2.2, 1.3),
arrowprops=dict(facecolor='r', edgecolor='b', width=1, headlength=10))
plt.show()
