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

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地址 全局变量 使用场景 当…...

多线程同步

多线程 程序中默认只有一个线程&#xff0c;pthread_create()函数调用后就有2个线程。 pthread_create() #include <pthread.h> #include <string.h> #include <unistd.h> #include <iostream> using namespace std; //线程函数 void * callback(vo…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

webpack面试题

面试题&#xff1a;webpack介绍和简单使用 一、webpack&#xff08;模块化打包工具&#xff09;1. webpack是把项目当作一个整体&#xff0c;通过给定的一个主文件&#xff0c;webpack将从这个主文件开始找到你项目当中的所有依赖文件&#xff0c;使用loaders来处理它们&#x…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!

今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等&#xff0c;设置经线、纬线都以10间隔显示。 2、需要插入背会归线&#xf…...