前面已经学习了如何输出二维图和三维图,部分文章详见下述链接:
python画图|极坐标下的3D surface-CSDN博客
python画图|垂线标记系列_如何用pyplot画垂直x轴的线-CSDN博客
有时候也需要同时输出二位和三维图,因此有必要学习一下。
【1】官网教程
首先我们打开官网教程,链接如下。
https://matplotlib.org/stable/gallery/mplot3d/mixed_subplots.html
我们把代码复制出来运行一下,获得的结果图很漂亮。
因此我们对代码做了解读。
【2】代码解读
首先是numpy和matplotlib引入。
import matplotlib.pyplot as plt #引入matplotlib模块画图 import numpy as np #引入numpy模块做数学计算
然后迅速定义了一个函数:
def f(t): #定义函数f(t)
return np.cos(2*np.pi*t) * np.exp(-t)
之后定义了要画2行一列图形:
# Set up a figure twice as tall as it is wide
fig = plt.figure(figsize=plt.figaspect(2.)) #定义图的大小
fig.suptitle('A tale of 2 subplots') #定义图名
进入画图阶段,先定义二维图画法:
# First subplot
ax = fig.add_subplot(2, 1, 1) #定义2行一列图
t1 = np.arange(0.0, 5.0, 0.1) #定义变量
t2 = np.arange(0.0, 5.0, 0.02) #定义变量
t3 = np.arange(0.0, 2.0, 0.01) #定义变量
ax.plot(t1, f(t1), 'bo', #输出第一个二维图
t2, f(t2), 'k--', markerfacecolor='green')
ax.grid(True) #画网格
ax.set_ylabel('Damped oscillation') #定义Y轴
在定义三维图画法:
# Second subplot
ax = fig.add_subplot(2, 1, 2, projection='3d') #定义第二个图为3D图
X = np.arange(-5, 5, 0.25)#定义变量
Y = np.arange(-5, 5, 0.25)#定义变量
X, Y = np.meshgrid(X, Y) #定义变量,让XY充分组合
R = np.sqrt(X**2 + Y**2) ##定义变量
Z = np.sin(R) #定义变量
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, #输出surface图
linewidth=0, antialiased=False)
ax.set_zlim(-1, 1) #设置Z轴
最后一步,将图形稳稳输出:
plt.show() #输出图形
【3】修改代码
首先考虑到二维图中自变量是重合的,将其拆分后:
t1 = np.arange(0.0, 2.0, 0.1) #定义变量 t2 = np.arange(2.0, 5.0, 0.02) #定义变量 t3 = np.arange(5.0,7.0, 0.01) #定义变量
现在自变量变成连续的区间。
然后将不同自变量对应的因变量用不同的颜色和线型区分:
ax.plot(t1, f(t1), 'bo', #输出第一个二维图
t2, f(t2), 'k--',
t3,f(t3),markerfacecolor='red')
此时的输出结果为:

图2
由图2氪可见,上面的子图输出了连续但不同线型不同颜色的二维图,下面输出了三维图。
【4】改写代码
首先考虑到将surface图改成好看的渐变色,增加cmap设置:
surf = ax.plot_surface(X, Y, Z, cmap=plt.cm.PuBuGn,rstride=1, cstride=1, #输出surface图
linewidth=0, antialiased=False)
然后在增加一个surface图:
ax = fig.add_subplot(1, 3, 3, projection='3d') #定义第二个图为3D图
X1 = np.arange(5, 15, 0.25)#定义变量
Y1 = np.arange(5, 15, 0.25)#定义变量
X1, Y1 = np.meshgrid(X1, Y1) #定义变量,让XY充分组合
R1 = np.sqrt(X1**2 + Y1**2) ##定义变量
Z1= np.sin(R1) #定义变量
surf1 = ax.plot_surface(X1, Y1, Z1, cmap='summer_r',rstride=1, cstride=1, #输出surface图
linewidth=0, antialiased=False)
ax.set_zlim(-1, 1) #设置Z轴
为了让图形好看,我们提前将图形设置成了1行3列:
ax = fig.add_subplot(1, 3, 1) #定义1行3列图
运行结果为:

图3
由图3可见,横向输出了二维和三维图。
【5】总结
学习了同时输出二维和三维图,掌握了图形坐标和颜色设置。







![nginx: [emerg] unknown “connection_upgrade“ variable 解决与思考](https://i-blog.csdnimg.cn/direct/7d411d1ba0874e81a3d65863fcfc6a8b.png)







![[产品管理-21]:NPDP新产品开发 - 19 - 产品设计与开发工具 - 详细设计与规格定义](https://i-blog.csdnimg.cn/direct/0da93f21dd5c4d45b571ca975a5647bb.png)


