文章目录
- matplotlib使用笔记(python)
- 1、画单个图(曲线),设置图像长宽、保存图片、设置图像标题
- 2、matplotlib不能正确显示中文的解决办法
- 3、在单个图中绘制多条信息,不同颜色标注
- 4、描点、设置曲线类型
- 5、plt.plot(color='')、plt.plot(linestyle='')、plt.plot(marker='')
- 6、设置X轴、Y轴长度和标签
- 7、在一张图中画多张图
- 8、plt画图时,设置为不显示坐标轴
- 9、绘制等高线:plt.contourf或plt.contour
- 10,获取图像的刻度值
- 11、给图像加上渐变条colorbar
- 12、matplotlib生成svg格式图片(直接给文件名后缀设置为.svg)
- 13、将字体改为Times New Roman
- 14、Times New Roman字体改为不加粗
- 15、使用subplot画图时,如何拉来子图之间的距离
matplotlib使用笔记(python)
1、画单个图(曲线),设置图像长宽、保存图片、设置图像标题
import matplotlib.pyplot as plt
plt.figure(figsize=(20,8)) #设置图像大小和长宽比例
plt.plot(data,label='ECG signal') #data是读取好的一维数据,此时X轴自动生成。label是为该信号加上标注
#或者手动生成x轴数据
#x_axis = list(range(0,data.size))
#plt.plot(x_axis,data,label='ECG signal') #效果等同于plt.plot(data,label='ECG signal')
plt.title('图片标题')
plt.legend() #加上这句才能正确显示label信息
plt.savefig('./ECG_signal.png') #保存图片
plt.show()
x_axis = [0:data.size]
plt.figure(figsize=(20,8))
plt.plot(x_axis,data,label='ECG signal')
plt.legend()
plt.show()
效果:
2、matplotlib不能正确显示中文的解决办法
matplotlib.rc("font", family='Microsoft YaHei') #运行该行代码
3、在单个图中绘制多条信息,不同颜色标注
x_axis=list(range(0,data.size))
plt.figure(figsize=(20,8))
plt.plot(x_axis,data,label='ECG signal_1',color='b')
plt.plot(x_axis,data_1,label='ECG signal_2',color='r')
plt.title('图片标题')
plt.legend()
plt.show()
#基本颜色
#r——red;b——blue;c——cyan;g——green;k——black;w——white;y——yellow;m——magenta
效果图:
如果对线条颜色没有强制要求,可以只对其中一个信号标注颜色,其他会自动生成不同的颜色:
例如:
plt.plot(data1, 'b', label = 'original ECG signal')
plt.plot(data2, label='random flip up and down')
plt.plot(data3, label='gaussian noise')
plt.plot(data4, label='random varying amplitude')
plt.plot(data5, label='baseline drift')
plt.show()
PS:不显示label解决方案:在plt.show()前添加代码:
plt.legend()
4、描点、设置曲线类型
import numpy as np
import matplotlib.pyplot as plt
# 作y=sin(x)函数
x_axis = np.linspace(0, 2 * np.pi, 20)
y_axis = np.sin(x_axis)
plt.figure(figsize=(10,5))
plt.plot(x_axis, y_axis,marker='.',color='b')# 描点
plt.plot(x_axis, y_axis,color='yellow') #画线
效果图:
5、plt.plot(color=‘’)、plt.plot(linestyle=‘’)、plt.plot(marker=‘’)
参考:
https://blog.csdn.net/yldmkx/article/details/123210710
6、设置X轴、Y轴长度和标签
plt.xlim((0.0,2.0)) #设置长度
plt.ylim((0.0,2.0))
plt.xlabel('X轴') #设置标签
plt.ylabel('Y轴')
效果如下图X轴、Y轴
7、在一张图中画多张图
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')
fig, ax = plt.subplots(2, 2, figsize=(20,15), tight_layout=True)
#这里的 2,2 表示在大图中生成分布为2行2列的4张图
#figsize是设置大图的长宽比例,数值越大像素越高
ax = ax.ravel()
ax[0].set_title('(a)窦性心律') #给小图设置标题
ax[0].plot(data1) #data1为第一个小图的信号
ax[1].set_title('(b)室上性早搏')
ax[1].plot(data1)
ax[2].set_title('(c)室性早搏')
ax[2].plot(data1)
ax[3].set_title('(d)其他类型')
ax[3].plot(data1)
plt.show()
效果如下:
8、plt画图时,设置为不显示坐标轴
#添加以下代码
plt.axis('off')
设置前后效果:
9、绘制等高线:plt.contourf或plt.contour
- plt.conrour:绘制轮廓线;
- plt.contourf:绘制轮廓线并填充;
10,获取图像的刻度值
- ax.get_yticks()
11、给图像加上渐变条colorbar
- plt.colorbar()
12、matplotlib生成svg格式图片(直接给文件名后缀设置为.svg)
- plt.savefig(‘filename.svg’)
13、将字体改为Times New Roman
- 方法一,设置坐标轴字体
# plt.xticks(fontproperties='Times New Roman')
# plt.yticks(fontproperties='Times New Roman')
- 方法二,设置全局字体配置。(不能正常显示中文)
plt.rc('font',family='Times New Roman')
- 我自己尝试了第一种方法,不成功。(好像是与系统的字体有冲突)
- 第二种方法可以设置Times New Roman,但是不能正常显示中文字体。如下图。
14、Times New Roman字体改为不加粗
del matplotlib.font_manager.weight_dict['roman']
matplotlib.font_manager._rebuild()
15、使用subplot画图时,如何拉来子图之间的距离
- 使用 plt.subplots() 函数创建的子图默认是紧密排列的。如果你想要拉开子图之间的距离,可以使用 subplots_adjust() 函数来调整子图之间的间距和位置。
**subplots_adjust() **函数可以接受一些参数来控制子图的布局。其中常用的参数包括 left、right、bottom、top、hspace 和 wspace。
参数设置 | 描述 |
---|---|
left | 左边界的位置(0.0 到 1.0 之间的浮点数,默认为 0.125) |
right | 右边界的位置(0.0 到 1.0 之间的浮点数,默认为 0.9) |
bottom | 底部边界的位置(0.0 到 1.0 之间的浮点数,默认为 0.1 |
top | 顶部边界的位置(0.0 到 1.0 之间的浮点数,默认为 0.9) |
hspace | 子图之间的高度间距(以子图高度的比例表示,默认为 0.2) |
wspace | 子图之间的宽度间距(以子图宽度的比例表示,默认为 0.2) |
import matplotlib.pyplot as plt
fig, axs = plt.subplots(2, 2)
fig.subplots_adjust(hspace=0.5, wspace=0.5) # 拉开子图之间的间距
axs[0, 0].plot([1, 2, 3], [1, 2, 3])
axs[0, 0].set_title('Plot 1')
axs[0, 1].plot([1, 2, 3], [3, 2, 1])
axs[0, 1].set_title('Plot 2')
axs[1, 0].plot([1, 2, 3], [2, 3, 1])
axs[1, 0].set_title('Plot 3')
axs[1, 1].plot([1, 2, 3], [1, 3, 2])
axs[1, 1].set_title('Plot 4')
plt.show()
效果如图