Bootstrap

python画图|同时输出二维和三维图

前面已经学习了如何输出二维图和三维图,部分文章详见下述链接:

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】总结

学习了同时输出二维和三维图,掌握了图形坐标和颜色设置。

 

 

;