当前位置: 首页 > news >正文

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')

此时的输出结果为:

bf82240faf6f41c5bd93b2b9d0797905.png

图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列图

运行结果为:

6541ab2c430b4e18be1836c5f088dcfa.png

图3

由图3可见,横向输出了二维和三维图。

【5】总结

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

 

 

 

 


http://www.mrgr.cn/news/27856.html

相关文章:

  • WPF中MVVM工具包 CommunityToolkit.Mvvm
  • 量子计算与人工智能的交汇:科技未来的新引擎
  • Javascript 判断数据类型
  • 吴恩达深度学习笔记(12)14
  • D3的竞品有哪些,D3的优势,D3和echarts的对比
  • Redis增删改查、复杂查询案例分析
  • C++——哈希unordered_set/unordered_map的封装
  • 火语言RPA流程组件介绍--下拉框选择
  • 你可能遗漏的一些C#/.NET/.NET Core知识点
  • 高效网络爬虫设计:多线程抓取网页内容
  • AI学习指南深度学习篇-RMSprop算法流程
  • [产品管理-21]:NPDP新产品开发 - 19 - 产品设计与开发工具 - 详细设计与规格定义
  • linux服务器配置及服务器资源命令使用查看
  • UDP_SOCKET编程实现
  • Vue3 Day4-计算、监视属性
  • 松材线虫多光谱数据集
  • InputDispatcher的调试日志isLoggable动态开放logcat实战使用
  • 【退役之再次线上部署】Spring Boot + VUE + Nginx + MySQL
  • verilog运算符优先级
  • 堆排序,快速排序
  • C#/.NET/.NET Core技术前沿周刊 | 第 5 期(2024年9.9-9.15)
  • Linux: virtual: qemu-kvm: top cpu usage的组成是否包含guest的使用?
  • 窗口嵌入桌面背景层(vb.net,高考倒计时特供版)
  • 基于双PI矢量控制结构和SVPWM的风力发电系统Simulink建模与仿真
  • C++线程库
  • (SERIES12)DM性能优化