系列文章目录
Python 建模入门:球体建模
一、建模需求
使用matplotlib库和mpl_toolkits.mplot3d模块来绘制一个球体的3D图形,并带有坐标轴。
二、源代码
代码如下:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
from matplotlib.font_manager import FontProperties
# 设置matplotlib的默认字体为黑体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def draw_sphere_with_axes(radius=1):
# 创建一个新的图和子图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# 生成球体的网格
phi = np.linspace(0, 2 * np.pi, 100)
theta = np.linspace(0, np.pi, 100)
phi, theta = np.meshgrid(phi, theta)
x = radius * np.sin(theta) * np.cos(phi)
y = radius * np.sin(theta) * np.sin(phi)
z = radius * np.cos(theta)
# 绘制球体网格
ax.plot_surface(x, y, z, color='b', alpha=0.5)
# 设置坐标轴范围
ax.set_xlim([-1.5 * radius, 1.5 * radius])
ax.set_ylim([-1.5 * radius, 1.5 * radius])
ax.set_zlim([-1.5 * radius, 1.5 * radius])
# 设置坐标轴比例为等比例
ax.set_box_aspect([1, 1, 1])
# 显示坐标轴
ax.set_axis_on()
# 设置坐标轴标题
ax.set_xlabel('X轴', fontsize=12)
ax.set_ylabel('Y轴', fontsize=12)
ax.set_zlabel('Z轴', fontsize=12)
# 显示图形
plt.show()
# 调用函数绘制带坐标轴的球体
draw_sphere_with_axes(1)
三、代码分析
1.导入matplotlib.pyplot模块,并给它起了个简短的别名plt。这是用于绘图的基础模块。
2.从mpl_toolkits.mplot3d导入Axes3D,这是用于创建3D坐标轴的类。
3.导入numpy库,这是用于数值计算的基础模块,提供了大量的数学函数和对多维数组的支持。
4.从matplotlib.font_manager导入FontProperties,这用于指定字体属性,但在此代码中并未使用。
5-8. 设置matplotlib的默认字体为黑体(SimHei),并设置axes.unicode_minus为False,以便能够正常显示负号。
10.定义了一个名为draw_sphere_with_axes的函数,该函数接受一个参数radius(半径),其默认值为1,用于定义球体的大小。
12-14. 创建一个新的matplotlib图形,并添加一个3D坐标轴。
16-22. 生成球体的网格。使用numpy的linspace和meshgrid函数生成经纬度网格,然后计算对应的球体上的点的坐标。
24.使用plot_surface方法绘制球体的表面。x、y、z是球体上的点的坐标,color='b’设置球体颜色为蓝色,alpha=0.5设置透明度为0.5。
26-29. 设置3D坐标轴的范围,以便适当地显示球体。
31.设置坐标轴比例为等比例,这样在所有轴上的单位长度都是相同的。
32.显示坐标轴。
35-37. 设置坐标轴的标题,并指定字体大小。
39.调用plt.show()来显示图形。
40.调用draw_sphere_with_axes函数来绘制一个半径为1的球体。
代码中使用plot_surface方法绘制了一个球体,该方法能够根据提供的经纬度网格和球体半径生成3D表面上的点,并将其绘制出来。这种方法是创建复杂3D形状的一种简便方式。
四、效果展示
总结
以上就是今天要讲的内容,运行这段代码会弹出一个窗口,显示一个3D球体,球体带有坐标轴,坐标轴的标题分别标记为"X轴"、“Y轴"和"Z轴”。坐标轴的范围被设置为球体半径的1.5倍,以确保球体完全显示在视窗内。