python画图|中秋到了,尝试画个月亮(球体画法)
学习了一段时间的画图,已经掌握了一些3D图的画法,部分链接如下:
python画图|极坐标下的3D surface-CSDN博客
python画图|3D参数化图形输出-CSDN博客
我们今天尝试一下月亮的画法。
【1】官网教程
首先还是到达官网教程学习:
3D surface (solid color) — Matplotlib 3.9.2 documentation
这里只给出了球体的画法,因此我们要自己探索。
探索之前先对官网代码进行解读。
【2】代码解读
首先依然是matpl和numpy的引入:
import matplotlib.pyplot as plt #引入matplotlib模块画图 import numpy as np #引入numpy模块做数学计算
然后定义了要画图:
fig = plt.figure() #定义要画图 ax = fig.add_subplot(projection='3d') #定义要画3d图
之后定义了变量:
# Make data u = np.linspace(0, 2 * np.pi, 100) #定义自变量 v = np.linspace(0, np.pi, 100) #定义自变量 x = 10 * np.outer(np.cos(u), np.sin(v)) #定义因变量 y = 10 * np.outer(np.sin(u), np.sin(v)) #定义因变量 z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) #定义因变量
最后定义了图形类型并要求输出图形:
# Plot the surface
ax.plot_surface(x, y, z) #定义图形类型为surface# Set an equal aspect ratio
ax.set_aspect('equal') #设置坐标比例plt.show() #输出图形
至此完整的代码注释为:
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算fig = plt.figure() #定义要画图
ax = fig.add_subplot(projection='3d') #定义要画3d图# Make data
u = np.linspace(0, 2 * np.pi, 100) #定义自变量
v = np.linspace(0, np.pi, 100) #定义自变量
x = 10 * np.outer(np.cos(u), np.sin(v)) #定义因变量
y = 10 * np.outer(np.sin(u), np.sin(v)) #定义因变量
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) #定义因变量# Plot the surface
ax.plot_surface(x, y, z) #定义图形类型为surface# Set an equal aspect ratio
ax.set_aspect('equal') #设置坐标比例plt.show() #输出图形
输出图形为:

图1
在代码中,np.ones()d的功能是输出全是1的矩阵,用下述代码进行测试:
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算fig = plt.figure() #定义要画图
ax = fig.add_subplot(projection='3d') #定义要画3d图# Make data
u = np.linspace(0, 2 * np.pi, 100) #定义自变量
v = np.linspace(0, np.pi, 100) #定义自变量
x = 10 * np.outer(np.cos(u), np.sin(v)) #定义因变量
y = 10 * np.outer(np.sin(u), np.sin(v)) #定义因变量
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) #定义因变量print('np.size(u)=',np.size(u)) #输出np.size(u)的结果,也就是输出u的维度
print('np.ones(np.size(u))=\n',np.ones(np.size(u))) #按照u的维度输出全是1的一阶矩阵
此时的输出结果为:
np.size(u)= 100
np.ones(np.size(u))=
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1.]
【3】代码修改
月亮的颜色一般是渐变的,因此要设置颜色,首先尝试纯色设置,改变图形输出代码为:
# Plot the surface
ax.plot_surface(x, y, z,color='y') #定义图形类型为surface
输出结果为:

图2
可见这只是将球体变成黄色,没有渐变效果。
下一步尝试使用cmap来说设置颜色,之后有很好的实践效果,参考下述链接:
python画图|极坐标下的3D surface-CSDN博客
更具体的,追溯到官网链接:
https://matplotlib.org/stable/users/explain/colors/colormaps.html
为此改变图形输出代码为:
# Plot the surface ax.plot_surface(x, y, z,cmap='binary') #定义图形类型为surface
此时的输出结果为:

图3
由图3可见,球体的颜色变成黑白渐变。
至此的完整代码为:
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算fig = plt.figure() #定义要画图
ax = fig.add_subplot(projection='3d') #定义要画3d图# Make data
u = np.linspace(0, 2 * np.pi, 100) #定义自变量
v = np.linspace(0, np.pi, 100) #定义自变量
x = 10 * np.outer(np.cos(u), np.sin(v)) #定义因变量
y = 10 * np.outer(np.sin(u), np.sin(v)) #定义因变量
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) #定义因变量# Plot the surface
ax.plot_surface(x, y, z,cmap='binary') #定义图形类型为surface# Set an equal aspect ratio
ax.set_aspect('equal') #设置坐标比例plt.show() #输出图形
【4】代码改写
首先将ax.set_aspect('equal')改为注释,或者直接将其删除,输出结果为:‘

图4
可见球体略变,变成椭球体。 ax.set_aspect('equal')具有让各坐标轴按照相等的宽高比变化。
ax.set_aspect('equal')
恢复ax.set_aspect('equal'),修改Z的定义为:使其变量数增大一倍
z = 10 * np.outer(2*np.ones(np.size(u)), np.cos(v)) #定义因变量
同时把颜色改为纯色:
# Plot the surface
ax.plot_surface(x, y, z,color='w') #定义图形类型为surface
此时的输出结果为:

图5
由图5可见,变量个数对图形结果影响很大。这个椭球体已经不太像常规见到的月亮。
然后我们把自变量的个数改为1000,让图形细化,改后的变量定义为:
# Make data u = np.linspace(0, 2 * np.pi, 1000) #定义自变量 v = np.linspace(0, np.pi, 1000) #定义自变量 x = 10 * np.outer(np.cos(u), np.sin(v)) #定义因变量 y = 10 * np.outer(np.sin(u), np.sin(v)) #定义因变量 z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) #定义因变量
颜色设置也稍微修改一下:
# Plot the surface ax.plot_surface(x, y, z,cmap='Wistia') #定义图形类型为surface
此时的输出结果为:

图6
图6好像是一个熟透的月饼做的月亮。
至此的完整代码为:
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算fig = plt.figure() #定义要画图
ax = fig.add_subplot(projection='3d') #定义要画3d图# Make data
u = np.linspace(0, 2 * np.pi, 1000) #定义自变量
v = np.linspace(0, np.pi, 1000) #定义自变量
x = 10 * np.outer(np.cos(u), np.sin(v)) #定义因变量
y = 10 * np.outer(np.sin(u), np.sin(v)) #定义因变量
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v)) #定义因变量# Plot the surface
ax.plot_surface(x, y, z,cmap='Wistia') #定义图形类型为surface# Set an equal aspect ratio
ax.set_aspect('equal') #设置坐标比例plt.show() #输出图形
【5】总结
本文学习了球体(月亮)的基本画法,尝试修改了颜色、坐标轴纵横比和自变量密度。
相关文章:
python画图|中秋到了,尝试画个月亮(球体画法)
学习了一段时间的画图,已经掌握了一些3D图的画法,部分链接如下: python画图|极坐标下的3D surface-CSDN博客 python画图|3D参数化图形输出-CSDN博客 我们今天尝试一下月亮的画法。 【1】官网教程 首先还是到达官网教程学习: …...
【网络安全的神秘世界】攻防环境搭建及漏洞原理学习
🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 Kali安装docker 安装教程 PHP攻防环境搭建 中间件 介于应用系统和系统软件之间的软件。 能为多种应用程序合作互通、资源…...
pythonnet python图像 C# .NET图像 互转
C#是dotnet的代表虽然不是一个东西但是在这里代表同一件事,不要在意细节。 pythonnet是 python 和.net无缝连接的桥梁。那么python的图像是numpy表示,C#图象是Bitmap。 做图像想要python的便利又想要dotnet的强大就需要图像类型转换。 上程序。 1.Bi…...
spring security OAuth2 搭建资源服务器以及授权服务器/jdbc/jwt两种方案
一、认证服务器基于jdbc方式 如果不懂请移步上一篇文章:Spring security OAuth2 授权服务器搭建-CSDN博客 在上一篇文章中,TokenStore的默认实现为 InHenoryTokenStore 即内存存储,对于 CLient 信息,userDetaitsServce 接负责从存…...
计算机视觉—3d点云数据基础
点云数据 3d点云数据由来 3d点云 3D Point Cloud是一种用于表示三维空间中对象或场景的数据结构。在最基础的形式中,它是一个包含多个三维坐标点(X, Y, Z)的集合。这些点是通过对实际物体或场景表面进行离散采样而获得的,因此&a…...
Matlab simulink建模与仿真 第十八章(Stateflow状态机)
参考视频:Simulink/stateflow的入门培训_哔哩哔哩_bilibili 一、概述 Stateflow是集成于Simulink中的图形化设计与开发工具,主要用于针对控制系统中的复杂控制逻辑进行建模与仿真,或者说,Stateflow适用于针对事件响应系统进行建模…...
Linux系统终端中文件权限的10位字符是什么意思
Linux操作系统终端长格式显示的文件 在Linux操作系统终端中用文件长格式命令ls -l显示文件,如上图。第一列10个字符表示的含义如下: drwxrwxrwx 第一个字符是表示该文件的类型,如红色d表示该文件是一个目录,详细内容可以参考我…...
Qt QSerialPort串口编程
文章目录 Qt QSerialPort串口编程Qt Serial Port模块简述1.QSerialPortInfo类1.1示例用法 2.QSerialPort类2.1设置串口参数2.2打开串口2.3数据读写2.4关闭串口 3.串口编程基本流程3.1 简单实例 Qt QSerialPort串口编程 Qt 框架的Qt Serial Port 模块提供了访问串口的基本功能&…...
扫雷游戏及其中的知识点
大家好呀,今天我们给大家讲解扫雷游戏如何用C语言制作,以及制作扫雷游戏中的一些C语言知识。 想到扫雷游戏,大家有什么想法吗?大家还记得扫雷游戏是什么样子的吗?我在网上找了一些扫雷游戏的图片给大家提供参考: 如图所示,扫雷游戏需要的元素有以下几个: 1.进入游戏界面…...
【乐企-业务篇】开票前置校验服务-规则链服务接口实现(发票基础信息校验)
开票前置校验服务-规则链服务接口实现(发票基础信息校验) 代码 import liquibase.pro.packaged.L; import org.apache.commons.collections4.Collec...
【搜索算法】以扩召回为目标,item-tag不如query-tag能扩更多数量
首先ElasticSearch的召回结果已大量解决了精确召回的问题,扩召回主要就是增加一些推荐的搜索结果。 以item类目tag为例, 如果item类目体系一共20个类目,每个item都有一个类目,一共有10000个item,则平均每个类目tag下有…...
SpringBoot入门(黑马)
1. SpringBootWeb入门开发 需求:使用SpringBoot 开发一个web 应用,浏览器发起请求 /hello 后,给浏览器返回字符串"Hello World~"。 步骤: 1. 创建springBoot工程,并勾选web开发相关依赖。 2. 定义 HelloCo…...
Stream流操作
准备工作 准备 Gender 枚举类以及 Customer 类 enum Gender {MALE("男性"), FEMALE("女性");private String value;Gender() {}Gender(String value) {this.value value;}Overridepublic String toString() {return "Gender{" "value&qu…...
【Linux】查看操作系统开机时初始化的驱动模块列表的一个方法
这个方法是摸索出来的,也不一定对: 1、驱动层module_init(module_init_function)作为模块初始化,并且提供模块内部初始化的函数名; 2、找到所有驱动目录drivers下所有module_init(module_init_function),在内核6.9.0…...
快速入门Vue
Vue是什么 Vue.js(通常简称为Vue)是一个开源的JavaScript框架,用于构建用户界面和单页应用程序(SPA)。它由尤雨溪(Evan You)在2014年开发并发布。Vue的核心库只关注视图层,易于上手…...
ubuntu系统服务器离线安装python包
一、根据工程需要本地下载所需python包 1. 下载环境requirements.txt pip freeze > requirements.txt2. 根据requirements.txt下载python包 注意:查看服务器属于x_86架构还是arm架构、cpython还是pypy 2.1 确定服务器架构(终端输入) …...
re题(30)BUUCTF-[HDCTF2019]Maze
BUUCTF在线评测 (buuoj.cn) 查一下壳,32位upx壳 脱完壳放到ida,shiftF12看一下字符串,是个迷宫,maze(迷宫) 这里有一个经典的花指令 (导致找不到main函数) 下方有个奇怪的jnz指令,它跳转到了下…...
day36+day37 0-1背包
### 9.9 01背包问题(一维二维) 背包问题分类:01背包(一种物品只有一个),完全背包(一种物品有无数个),多重背包(不同物品有不同数量) 46. 携带研究…...
PostMan使用变量
环境变量 使用场景 当测试过程中,我们需要对开发环境、测试环境、生产环境进行测试 不同的环境对应着不同的服务器,那么这个时候我们就可以使用环境变量来区分它们 避免切换测试环境后,需要大量的更改接口的url地址 全局变量 使用场景 当…...
多线程同步
多线程 程序中默认只有一个线程,pthread_create()函数调用后就有2个线程。 pthread_create() #include <pthread.h> #include <string.h> #include <unistd.h> #include <iostream> using namespace std; //线程函数 void * callback(vo…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...
轻量级Docker管理工具Docker Switchboard
简介 什么是 Docker Switchboard ? Docker Switchboard 是一个轻量级的 Web 应用程序,用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器,使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...
