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

python画图|极坐标下的3D surface

前述学习过程中,我们已经掌握了3D surface的基本绘制技巧,详见链接:

python画图|3D surface基础教程-CSDN博客

基础教程中的3D surface绘制位于笛卡尔坐标系,但有时候会用到极坐标绘图。虽然我们已经学过简单的极坐标绘图技巧,详见链接:

python画图|极坐标中画直方图_ax1.plot()怎么画直方图-CSDN博客

但前面的极坐标绘图学习也是基于笛卡尔坐标系。

因此,很有必要继续探索3D 极坐标系下的surface图绘制。

【1】官网教程

打开官网链接,看到漂亮的3D图:

3D surface with polar coordinates — Matplotlib 3.9.2 documentation

很有必要,读懂官网程序。

【2】程序解读

程序开始,是亘古不变的numpy、matplotlib引入:

import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

然后设定要画图,画3D图:

fig = plt.figure() #定义要画图
ax = fig.add_subplot(projection='3d') #定义要画3D图

到这里其实都是前置条件,说明了要画图,给出了画图必须得数据计算支撑模块numpy和输出图形支撑模块matplotlib。

然后才开始定义变量:

# Create the mesh in polar coordinates and compute corresponding Z.
r = np.linspace(0, 1.25, 50) #定义自变量r
p = np.linspace(0, 2*np.pi, 50) #定义自变量p
R, P = np.meshgrid(r, p) #自变量r和p充分组合
Z = ((R**2 - 1)**2) #定义因变量R# Express the mesh in the cartesian system.
X, Y = R*np.cos(P), R*np.sin(P) #定义因变量XY

这里的meshgrid让r和p充分组合,之后:先完成了Z的定义,在完成了Z和Y的定义。

接下来输出图形:

# Plot the surface.
ax.plot_surface(X, Y, Z, cmap=plt.cm.YlGnBu_r) #画surface面,颜色按照YlGnBu_r分布

最后对坐标属性进行了设定,并输出图形:

# Tweak the limits and add latex math labels.
ax.set_zlim(0, 1) #设定Z轴范围
ax.set_xlabel(r'$\phi_\mathrm{real}$') #设定X轴为实轴
ax.set_ylabel(r'$\phi_\mathrm{im}$') #设定Y轴为虚轴
ax.set_zlabel(r'$V(\phi)$') #设定Z轴为角度轴plt.show() #输出图形

ab5f847eb2cd4c3584a535cb30be804b.png

图1

图1即为输出图形。

至此增添注释后的完整代码为:

import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算fig = plt.figure() #定义要画图
ax = fig.add_subplot(projection='3d') #定义要画3D图# Create the mesh in polar coordinates and compute corresponding Z.
r = np.linspace(0, 1.25, 50) #定义自变量r
p = np.linspace(0, 2*np.pi, 50) #定义自变量p
R, P = np.meshgrid(r, p) #自变量r和p充分组合
Z = ((R**2 - 1)**2) #定义因变量R# Express the mesh in the cartesian system.
X, Y = R*np.cos(P), R*np.sin(P) #定义因变量XY# Plot the surface.
ax.plot_surface(X, Y, Z, cmap=plt.cm.YlGnBu_r) #画surface面,颜色按照YlGnBu_r分布# Tweak the limits and add latex math labels.
ax.set_zlim(0, 1) #设定Z轴范围
ax.set_xlabel(r'$\phi_\mathrm{real}$') #设定X轴为实轴
ax.set_ylabel(r'$\phi_\mathrm{im}$') #设定Y轴为虚轴
ax.set_zlabel(r'$V(\phi)$') #设定Z轴为角度轴plt.show() #输出图形

【3】修改代码

cmap=plt.cm.YlGnBu_r为渐变式的上色,color为纯色。画图结果为:

85f9a2b8844c404683730c4e77e58068.png

图2

由图2课件,整个图形已经更换为红色。

【4】改写代码

改写代码,实现:

【a】并列输出多个图形;

【b】设定不同颜色的输出。

首先,将fig定义改为subplots形式,并约定每个子模型都画3D图:

fig ,[ax1,ax2,ax3]= plt.subplots(1,3,sharey=True,figsize=(6,2)) #定义要画图
ax1 = fig.add_subplot(1,3,1,projection='3d') #定义要画3D图
ax2 = fig.add_subplot(1,3,2,projection='3d') #定义要画3D图
ax3 = fig.add_subplot(1,3,3,projection='3d') #定义要画3D图

然后,修改画图plot_surface模块中的颜色指定:

ax1.plot_surface(X, Y, Z, cmap=plt.cm.PuBuGn) #画surface面,颜色按照PuBuGn分布
ax2.plot_surface(X, Y, Z, color='r') #画surface面,颜色为红色
ax3.plot_surface(X, Y, Z, color='g') #画surface面,颜色为绿色

此时的结果为:

ce49159cfefe4efa9fe8e65431eef17f.png

图3

图3即为并列输出结果,此时只有最左侧图形为渐变色。这里使用了PuBuGn代码,这个代码代表了一种新的渐变,详情可参考下述链接:

Choosing Colormaps in Matplotlib — Matplotlib 3.9.2 documentation

上图3中,似乎渐变图是最好看的,参考上述链接,修改颜色代码后:

# Plot the surface.
ax1.plot_surface(X, Y, Z, cmap=plt.cm.PuBuGn) #画surface面,颜色按照PuBuGn分布
ax2.plot_surface(X, Y, Z, cmap='Accent') #画surface面,颜色为v
ax3.plot_surface(X, Y, Z, cmap='summer_r') #画surface面,颜色为summer_r

此时的输出结果为:

2ad23cfbb90b43cab7bc65f6cfc0906f.png

图4

由图4可见,不同颜色的表达给人的感觉不同。

为精益求精,尝试把每个图的方框去掉,并且加上图名:

改后的执行去除方框功能和附近其他代码为:

fig ,[ax1,ax2,ax3]= plt.subplots(1,3,sharey=True,figsize=(6,2)) #定义要画图
fig.delaxes(ax1) #去除方框
fig.delaxes(ax2) #去除方框
fig.delaxes(ax3) #去除方框

增加图名代码为:

# Tweak the limits and add latex math labels.
ax1.set_title(label='cmap=plt.cm.PuBuGn' )
ax2.set_title(label='cmap=Accent' )
ax3.set_title(label='cmap=summer_r' )

输出图形为:

1fb67e70a882481ebfcdc848217ea93d.png

图5

图5即为无方框、带图名并列输出结果。

【5】总结

学习了极坐标下的3D surface画法,尝试修改了图形颜色,掌握了多个图形输出的方法,掌握了图形方框和图名设置方法。

 

 

相关文章:

python画图|极坐标下的3D surface

前述学习过程中,我们已经掌握了3D surface的基本绘制技巧,详见链接: python画图|3D surface基础教程-CSDN博客 基础教程中的3D surface绘制位于笛卡尔坐标系,但有时候会用到极坐标绘图。虽然我们已经学过简单的极坐标绘图技巧&a…...

html+css+js网页设计 旅游 大理旅游7个页面

htmlcssjs网页设计 旅游 大理旅游7个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…...

Day 29~42 JavaWeb

Java Web 1、基本概念 1.1、前言 web开发: web,网页的意思,www.baidu.com静态web html,css 提供给所有人看的数据始终不会发生变化动态web 淘宝,几乎是所有的网站 提供给所有人看的数据始终会发生变…...

小程序开发设计-第一个小程序:创建小程序项目④

上一篇文章导航: 小程序开发设计-第一个小程序:安装开发者工具③-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142219152?spm1001.2014.3001.5501 须知:注:不同版本选项有所不同,并无大碍。 一、创…...

C++设计模式——Mediator中介者模式

一,中介者模式的定义 中介者模式是一种行为型设计模式。它通过一个中介者对象将多个对象之间的交互关系进行封装,使得对象之间的交互需要通过中介者对象来完成。该设计模式的结构很容易理解,以中介者为中心。 中介者模式的设计思想侧重于在…...

微服务之间远程调用实现思路

项目使用的Spring Cloud Alibaba框架,微服务之间远程调用使用OpenFeign,具体实现步骤如下: (1)在api工程定义OpenFeign接口,使用FeignClient注解进行定义。 (2)服务提供方定义Open…...

获取STM32 MCU的唯一ID

STM32每个系列都会有唯一的一个芯片序列号(96位bit) STM32F10X 的起始地址是 0x1FFFF7E8 STM32F20X 的起始地址是 0x1FFF7A10 STM32F30X 的起始地址是 0x1FFFF7AC STM32F40X 的起始地址是 0x1FFF7A10 STM32L0XX 的起始地址是 0x1FF80050 STM32L1XX 的起…...

Debian项目实战——环境搭建篇

Debian系统安装 准备工作 1、系统镜像:根据自己的需要选择合适的版本格式:x86 / arm 架构 | 最好下载离线安装版本 | 清华镜像源 2、制作工具:balenaEtcher 3、系统媒介:16G以上U盘最佳 烧录镜像 打开balenaEtcher进行烧录&am…...

CenterNet官方代码—目标检测模型推理部分解析与项目启动

CenterNet模型推理部分解析 CenterNet官方代码环境部署 CenterNet作为2019年CVPR推出的论文,论文中给出了官方代码所在的github仓库地址。https://github.com/xingyizhou/CenterNet。 整个代码的代码量并不是特别大,但整个项目的难点在于使用了老版本的…...

测试开发基础——测试用例的设计

三、测试用例的设计 1. 什么是测试用例 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。 设计测试用例原则一:测试用例中一个必需部分是对预期输出或结果进…...

C++第五十一弹---IO流实战:高效文件读写与格式化输出

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1. C语言的输入与输出 2. 流是什么 3. CIO流 3.1 C标准IO流 3.2 C文件IO流 3.2.1 以写方式打开文件 3.2.1 以读方式打开文件 4 stringstre…...

C++中使用分治法求最大值

在C++中使用分治法(Divide and Conquer)来求一个数组中的最大值是一个经典的问题。分治法是一种通过将原问题分解为若干个小规模相似子问题,递归地求解这些子问题,然后将子问题的解合并成原问题的解的方法。 以下是使用分治法求数组中最大值的步骤: 分解(Divide):将数…...

数据集 CULane 车道线检测 >> DataBall

数据集 CULane 车道线检测 自动驾驶 无人驾驶目标检测 CULane是用于行车道检测学术研究的大规模具有挑战性的数据集。它由安装在六辆由北京不同驾驶员驾驶的不同车辆上的摄像机收集。收集了超过55小时的视频,并提取了133,235帧。数据示例如上所示。我们将数据集分为…...

Android CustomDialog圆角背景不生效的问题

一行解决: window?.setBackgroundDrawableResource(android.R.color.transparent) 原文件: /*** Created by Xinghai.Zhao* 自定义选择弹框*/ SuppressLint("InflateParams", "MissingInflatedId") class CustomDialog(context: Context?) : AlertDia…...

C++速通LeetCode简单第9题-二叉树的最大深度

深度优先算法递归: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right…...

com.microsoft.sqlserver:sqljdbc4:jar:4.0 was not found产生原因及解决步骤

文章目录 问题sqlserver 包找不到 报错原因分析主要原因 解决方案步骤 1:检查 pom.xml 中的依赖声明步骤 2:配置 Microsoft 的 Maven 仓库步骤 3:强制更新 Maven 依赖步骤 4:清理本地仓库缓存步骤 5:手动下载并安装 sq…...

【算法】 滑动窗口—最长无重复子串

“无重复字符的最长子串”,难度为Medium,看下题目: 输入一个字符串 s,请计算 s 中不包含重复字符的最长子串长度。 比如,输入 s "aabab",算法返回2,因为无重复的最长子串是 "ab…...

SpringBoot2:web开发常用功能实现及原理解析-上传与下载

文章目录 一、上传文件1、前端上传文件给Java接口2、Java接口上传文件给Java接口 二、下载文件1、前端调用Java接口下载文件2、Java接口下载网络文件到本地3、前端调用Java接口下载网络文件 一、上传文件 1、前端上传文件给Java接口 Controller接口 此接口支持上传单个文件和…...

Linux:进程状态和优先级

一、进程状态 1.1 操作系统学科(运行、阻塞、挂起) 为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态 大多数操作系统都遵循以下原则 1.1.1 运行状态 因为有一个调度器需要确保CPU的资源被合理使用,所以需要维护…...

代码随想录算法训练营day37

1.携带研究材料 1.1 题目 52. 携带研究材料&#xff08;第七期模拟笔试&#xff09; 1.2 题解 #include <iostream> #include <functional> #include <vector> using namespace std;int main() {//输入相关信息int classes, cabaity;cin >> classe…...

全生命周期的智慧城市管理

前言 全生命周期的智慧城市管理。未来&#xff0c;城市将在 实现从基础设施建设、日常运营到数据管理的 全生命周期统筹。这将避免过去智慧城市建设 中出现的“碎片化”问题&#xff0c;实现资源的高效配 置和项目的协调发展。城市管理者将运用先进 的信息技术&#xff0c;如物…...

Go 语言实现高性能 EventBus 事件总线系统(含网络通信、微服务、并发异步实战)

前言 在现代微服务与事件驱动架构&#xff08;EDA&#xff09;中&#xff0c;事件总线&#xff08;EventBus&#xff09; 是实现模块解耦与系统异步处理的关键机制。 本文将以 Go 语言为基础&#xff0c;从零构建一个高性能、可扩展的事件总线系统&#xff0c;深入讲解&#…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1开通指南及使用心得

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年CSDN全站排名top 28。 &#x1f3c6;数年电商行业从业经验&#xff0c;AWS/阿里云资深使用用…...

OpenCV CUDA模块图像处理------图像融合函数blendLinear()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数执行 线性融合&#xff08;加权平均&#xff09; 两个图像 img1 和 img2&#xff0c;使用对应的权重图 weights1 和 weights2。 融合公式…...

二叉树的遍历总结

144.二叉树的前序遍历(opens new window)145.二叉树的后序遍历(opens new window)94.二叉树的中序遍历 二叉数的先中后序统一遍历法 public static void preOrder(BiTree root){BiTree p root;LinkedList<BiTree> stack new LinkedList<>();while(p ! null ||…...

uniapp map组件的基础与实践

UniApp 中的 map 组件用于在应用中展示地图,并且支持在地图上添加标记、绘制线条和多边形等功能。以下是一些基本用法: 1. 基本结构 首先,确保你在页面的 .vue 文件中引入了 map 组件。以下是创建一个简单地图的基本代码结构: <template><view class="con…...

【笔记】旧版MSYS2 环境中 Rust 升级问题及解决过程

下面是一份针对在旧版 MSYS2&#xff08;安装在 D 盘&#xff09;中&#xff0c;基于 Python 3.11 的 Poetry 虚拟环境下升级 Rust 的处理过程笔记&#xff08;适用于 WIN 系统 SUNA 人工智能代理开源项目部署要求&#xff09;的记录。 MSYS2 旧版环境中 Rust 升级问题及解决过…...

32单片机——窗口看门狗

1、WWDG的简介 WWDG&#xff1a;Window watchdog&#xff0c;即窗口看门狗 窗口看门狗本质上是能产生系统复位信号和提前唤醒中断的递减计数器 WWDG产生复位信号的条件&#xff1a; &#xff08;1&#xff09;当递减计数器值从0x40减到0x3F时复位&#xff08;即T6位跳变到0&a…...

Ubuntu 系统部署 MySQL 入门篇

一、安装 MySQL 1.1 更新软件包 在终端中执行以下命令&#xff0c;更新系统软件包列表&#xff0c;确保安装的是最新版本的软件&#xff1a; sudo apt update 1.2 安装 MySQL 执行以下命令安装 MySQL 服务端&#xff1a; sudo apt install mysql-server 在安装过程中&…...

实践指南:从零开始搭建RAG驱动的智能问答系统

LLM 赋能的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些是可以回答关于特定来源信息问题的应用程序。这些应用程序使用一种称为检索增强生成的技术&#xff0c;或 RAG。本文将展示如何基于 LangChain 构建一个简单的基于非结构化数据文本数据源的问答应用程序。 温…...