就是说,每次在使用python里的plt画图的时候,总有部分代码不熟悉,比如画子图这些,然后在网上找的代码都有点不太一样,总感觉很深奥的,这次笔记就把这些画图的技巧从头到脚好好学习一下,也相当于是给数学建模里面画图做准备。
以前用matlab用的比较多,里面画子图的时候直接:figure(1),subplot(121)这种,但是在python里调用的方式好像又不太一样了。
上网查找了资料,得到以下知识点:
1)figure相当于大画布,整个作图的大环境
2)axes相当于是小画布,一个figure上能有很多的axes(通过subplot 来设置他们的排列顺序)
3)经典问题:plt.plot和ax.plot的区别
相比于前者,后者相当于是线生产出figure 再生产出axes画了一个图。plt.plot()通过plt.gca()获得当前的Axes,再调用ax.plot()方法实现绘图(摘抄自网络:https://www.zhangjunbk.com/article/27082)。然这句话读起来确实有一些拗口,就这么说吧,真的要标准的画图,用ax.plot肯定是要标准一些的。 我称之其为《最标准的过程》(我自己定义的)
那么这个标准过程是怎么弄的呢:
import matplotlib.pyplot as plt
fig,axes=plt.subplots(figsize = (10, 5))
plt.show()
这张图看起来好像是plt.plot差球不多
figsize 是指定大画布figure的长度
要是我想多画几个子图呢,可以在前面两个参数处进行设置,比如这里设置的是2排3列。
import matplotlib.pyplot as plt
fig,axes=plt.subplots(2,3,figsize = (10, 5)) #这个参数默认的情况下是1
plt.show()
这样axes其优势是不是进一步凸显出来了,貌似plt不能直接这样subplot吧(主要还是matlab用习惯了,)
然后后面的作图就按步就班了,该画啥就画啥。
比如我在第1,1个图片里画抛物线图,第2,2个图片里面画散点图
import matplotlib.pyplot as plt
import numpy as np
import random
x=np.arange(1,10,1)
y= x**2
Ix=[random.randrange(0,100) for i in range(100)]
Iy=[random.randrange(0,100) for i in range(100)]
fig,axes=plt.subplots(2,3,figsize = (10, 5)) #这个参数默认的情况下是1
axes[0][0].plot(x,y)
axes[1][1].scatter(Ix,Iy)
plt.show()
添加坐标轴名称:
axes[0][0].set_xlabel('x') #设置横坐标名称
设置坐标轴范围:
axes[0][0].set_xlim(0,10) #设置坐标轴范围
设置标签:
axes[0][0].plot(x,y,label='抛物线')
axes[0][0].legend(loc='best')
总代码:
import matplotlib.pyplot as plt
import numpy as np
import random
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
x=np.arange(1,10,1)
y= x**2
Ix=[random.randrange(0,100) for i in range(100)]
Iy=[random.randrange(0,100) for i in range(100)]
fig,axes=plt.subplots(2,3,figsize = (15, 10)) #这个参数默认的情况下是1
axes[0][0].plot(x,y,label='抛物线')
axes[0][0].set_title('抛物线') #设置子图标题
axes[0][0].set_xlabel('x') #设置横坐标名称
axes[0][0].set_ylabel('y') #设置纵坐标名称
axes[0][0].legend(loc='best')
axes[0][0].set_xlim(0,10) #设置坐标轴范围
axes[1][1].scatter(Ix,Iy)
plt.show()