大流量网站开发,做行程规划的旅行网站,wordpress付费主题,东莞工作招聘网学习了一段时间的画图#xff0c;已经掌握了一些3D图的画法#xff0c;部分链接如下#xff1a;
python画图|极坐标下的3D surface-CSDN博客
python画图|3D参数化图形输出-CSDN博客
我们今天尝试一下月亮的画法。
【1】官网教程
首先还是到达官网教程学习#xff1a; …学习了一段时间的画图已经掌握了一些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(projection3d) #定义要画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(projection3d) #定义要画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(projection3d) #定义要画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,colory) #定义图形类型为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,cmapbinary) #定义图形类型为surface 此时的输出结果为 图3
由图3可见球体的颜色变成黑白渐变。
至此的完整代码为
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算fig plt.figure() #定义要画图
ax fig.add_subplot(projection3d) #定义要画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,cmapbinary) #定义图形类型为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,colorw) #定义图形类型为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,cmapWistia) #定义图形类型为surface 此时的输出结果为 图6
图6好像是一个熟透的月饼做的月亮。
至此的完整代码为
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算fig plt.figure() #定义要画图
ax fig.add_subplot(projection3d) #定义要画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,cmapWistia) #定义图形类型为surface# Set an equal aspect ratio
ax.set_aspect(equal) #设置坐标比例plt.show() #输出图形
【5】总结
本文学习了球体月亮的基本画法尝试修改了颜色、坐标轴纵横比和自变量密度。