matplotlib绘图与子图

matplotlib绘图与子图

绘图基础

  • 画布figure, 代表了整幅图,通过包括底图、axes对象以及其它图元素的方式,囊括了全部图元素。

  • axes对象(图形区)总是从属于.figure类对象,须创建在figure类对象中。

  • axes对象(图形区),实现了这张图的数据区内容,是制图表达的核心内容。

  • 一个figure对象,可以包含多个axes对象

  • figure 可以添加很多axes对象 add_axes添加一个axes对象,add_subfigure添加子图,add_subplots添加一个或一组axes对象

  • 画纸上最上方是标题title,用来给图形起名字

  • 坐标轴Axis,横轴叫x坐标轴xlabel,纵轴叫y坐标轴ylabel

  • 图例Legend, 代表图形里的内容

  • 网格Grid, 图形中的虚线,True显示网格

  • 点 Markers:表示点的形状。

plt.figure

plt.figure 初始化画板,设置窗口尺寸大小,分辨率

fig = plt.figure(figsize=(a, b),dpi=100)  

输入  a为图形的宽, b为图形的高,单位为英寸。  dpi 分辨率
返回  figure 对象

fig.subplots

fig.subplots 添加一组子图

axs = fig.subplots(nrows=1, ncols=1,*arg,**kwargs)

输入 nrows=1, ncols=1 分别是行和列
返回 axes的对象列表   [axes]
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure(figsize=[9,6],dpi=100) #  创建画布,figure
axs = fig.subplots(1,2)         #  设置axs分布

x=np.arange(0,5,0.2)
y1=np.sin(x)
y2=np.e**(0.4*x)-2
y3=np.cos(x)
y4=0.5*x
print(x)

axs[0].plot(x,y1,label="sin")
axs[0].plot(x,y2,label='exp')

axs[1].plot(x,y3,'--',label='cos')
axs[1].plot(x,y4,'-.',label="linear")

axs[0].legend()
axs[1].legend()

axs[0].grid()

plt.show()
img

fig.add_subplot

fig.add_subplot 添加一个子图

ax = fig.add_subplot(nrows, ncols, index)

输入 nrows, ncols, index 行、列、索引
返回 axes的对象
axs = fig.subplots(1,2)         #  设置axs分布   
等价于
axs1 = fig.add_subplot(1, 2, 1)
axs2 = fig.add_subplot(1, 2, 2)
import numpy as np
import matplotlib.pyplot as plt

fig=plt.figure(figsize=(8,8),dpi=80)
# 可从图中看到,我们的画布是分为2x2的区域
ax1=fig.add_subplot(2,2,1)     
ax1.plot([1,2,3,4],[1,2,3,4])
ax2=fig.add_subplot(2,2,2)
ax2.plot([1,2,3,4],[2,2,3,4])
ax3=fig.add_subplot(2,2,3)
ax3.plot([1,2,3,4],[1,2,2,4])
ax4=fig.add_subplot(2,2,4)
ax4.plot([1,2,3,4],[1,2,3,3])

plt.show()
img

fig.add_axes

fig.add_axes自由绘制子图

ax = fig.add_axes(left, bottom, width, height)

输入  rect=((left, bottom, width, height))  画图上的坐标
返回  axes的对象

import numpy as np
import matplotlib.pyplot as plt


fig = plt.figure(figsize=[9,6],dpi=90) # 获得figure对象

ax1 = fig.add_axes([0.2, 0.5, 0.2, 0.3],
                   ylim=(-1.2, 1.2))    # 左边20% 底部50% 宽20% 高30%

ax2 = fig.add_axes([0.1, 0.05, 0.8, 0.4],
                   ylim=(-1.2, 1.2)) # 左边10% 底部5% 宽80% 高40%

x = np.linspace(0, 10)
ax1.plot(np.sin(x),'r')
ax2.plot(np.cos(x),'--')

ax1.grid()   # ax1 添加网格
plt.show()
img

缺省和就近原则

缺省是指无主动指明的情况下,系统自动提供的资源。

  • 画图板的缺省是:figure(1)
  • 图形区的缺省是:subplot(111)

就近原则:在每个函数操作时对上一层资源的依赖遵守最近原则,举例如下:

  • subplot()作用在最近使用的画图板上,有可能是缺省的画图板figure(1)。
  • axes()作用在最近使用的画图板上,有可能是缺省的画图板figure(1)。
  • axis()作用在最近使用的图形区上,可能来自subplot、axes等
  • plot()作用在最近使用的图形区上,可能来自subplot、axes等

总结

1、首先创建一个合适大小的画布 figure

2、然后再在画布上设置图形区区对象 **axes ** (只需要一个图像区,可以省略)

3、紧接着分别 在图形区对象 axes 绘制图像和图形,进行独立设置 (只需要一个图像区, 可以直接plot 代替)

4、最后再将 画布 figure 进行展示或者保存

参考资料

https://zhuanlan.zhihu.com/p/585576512

https://matplotlib.org/stable/gallery/index.html#

posted @ 2023-07-25 21:47  贝壳里的星海  阅读(52)  评论(0编辑  收藏  举报