import matplotlib.pyplot as pltimport numpy as npplt.style.use('_mpl-gallery')# Make data for a double helixn = 50theta = np.linspace(0, 2*np.pi, n)x1 = np.cos(theta)y1 = np.sin(theta)z1 = np.linspace(0, 1, n)x2 = np.cos(theta + np.pi)y2 = np.sin(theta + np.pi)z2 = z1# Plotfig, ax = plt.subplots(subplot_kw={"projection": "3d"})ax.fill_between(x1, y1, z1, x2, y2, z2, alpha=0.5)ax.plot(x1, y1, z1, linewidth=2, color='C0')ax.plot(x2, y2, z2, linewidth=2, color='C0')ax.set(xticklabels=[], yticklabels=[], zticklabels=[])plt.show()
# 1. 导入库与样式设置import matplotlib.pyplot as pltimport numpy as npplt.style.use('_mpl-gallery')# 2. 生成双螺旋数据n = 50theta = np.linspace(0, 2*np.pi, n) # 角度从 0 到 2π,共 50 个点x1 = np.cos(theta) # 第一条螺旋的 x 坐标(圆轨迹)y1 = np.sin(theta) # 第一条螺旋的 y 坐标z1 = np.linspace(0, 1, n) # 第一条螺旋的 z 坐标(从 0 到 1 线性增加)x2 = np.cos(theta + np.pi) # 第二条螺旋的 x 坐标(相位偏移 π,即相对侧)y2 = np.sin(theta + np.pi) # 第二条螺旋的 y 坐标z2 = z1 # 第二条螺旋的 z 坐标与第一条相同# 通过 theta 生成一个圆周上的点,(x1, y1) 构成一个单位圆。# 随着 z1 线性增加,(x1, y1, z1) 形成一条上升的螺旋线。# 第二条螺旋线的 (x2, y2) 相位偏移 π,因此它位于圆的另一侧,与第一条螺旋线共同构成双螺旋结构(类似 DNA 的两条链)。#3. 创建三维图形并绘制fig, ax = plt.subplots(subplot_kw={"projection": "3d"})ax.fill_between(x1, y1, z1, x2, y2, z2, alpha=0.5)ax.plot(x1, y1, z1, linewidth=2, color="C0")ax.plot(x2, y2, z2, linewidth=2, color="C0")# subplot_kw={"projection": "3d"} 创建一个三维坐标轴。# ax.fill_between(...):这里意图填充两条螺旋线之间的区域# ax.plot(...) 绘制两条螺旋线,线宽为 2,颜色均为 C0(默认蓝色)。# 4. 设置坐标轴标签ax.set(xticklabels=[], yticklabels=[], zticklabels=[])# 隐藏三个坐标轴的刻度标签,使图形更简洁。# 5. 显示图形plt.show()
- 使用fill_between(x1, y1, z1, x2, y2, z2)函数填充双螺旋线之间区域;