先生成几组的数据
- sinx
train_data = np.linspace(0, 10, 50)
train_label = np.sin(train_data) + (np.random.rand(len(train_data)) - 0.5) * 0.2 - random
分割画布 subplot and subplots
- subplot:随用随切,灵活布局
plt.subplot(4,3,7):将画布分成4行,3列,取第7个子块
- subplots:规划合理,一步到位
fig,ax = plt.subplots(4,3):将画布分成4行,3列后,返回一个元组,
第一项是Figure Object,第二列是所有的ax组成的ndarray。
如果想画第2行第2列幅图,就使用ax[1][1]
值得注意的是:在subplots方法中有一个bool类型的squeeze参数,该参数如果为True,生成形状为n1或者1n的图表时,会只返回一个1维ndarray;如果是False,则生成一个2维的ndarray。默认是True。
- 可以看到subplot和subplots有一定的区别
- subplot调用后、其他位置都是空白的
- subplots调用后、其他位置已经生成了图
- 可以总结出来两者调用方式的差异,subplot调用了之后,只取了当前画布的指定块,所以还可以对其他的位置进行再分配。而subplots调用之后,就一次性将当前画布进行了分配。
- 从代码量上看,subplot每次切割都需要一行,subplots切12个图,只需要一行。
- 从灵活性上看,subplot可以进行再分配,subplots就不行。一个较为灵活的例子如下
plt.subplot(4,3,7)
plt.plot(train_data,train_label)
plt.subplot(4,3,10)
plt.plot(train_data,train_label)
plt.subplot(2,1,1)
plt.plot(train_data,train_label)
plt.subplot(2,2,4)
plt.plot(train_data,train_label)
散点图和曲线图 针对2维的简单数据
- scatter:散点
ax.scatter(train_data,train_label,marker = "+") -
plot:连线
ax.plot(train_data,train_label)
直接显示一个numpy或者图片
a = np.linspace(1,256,256)
a = a.reshape((16,16))
plt.imshow(a)
绘制3D图
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-2, 2, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(abs(4-(X ** 2) - (Y ** 2)))
#Z = np.sin(R)
# 具体函数方法可用 help(function) 查看,如:help(ax.plot_surface)
ax.plot_surface(X, Y, R, rstride=1, cstride=1, cmap='rainbow')
plt.show()
属性和样式设置
plt.figure(i) 参数i设置图的编号
plt.ylim(down,top) 设置y轴的上下界
plt.margins(f) 参数f是0-1的小数,设置相对边距
ax.set(xlabel="x", ylabel="y=f(x)", title="y = sin(x),red:predict data,bule:true data")
ax.grid(True)