【问题标题】:Draw points connected by spiral on a sphere with Matplotlib使用 Matplotlib 在球体上绘制螺旋连接的点
【发布时间】:2016-09-27 23:53:11
【问题描述】:

我想使用 Matplotlib 在其表面上绘制一个带有点的球体。这些点应通过从球体一侧到另一侧的螺旋连接。 为了澄清这一点,情节或多或少应该是这样的: 有没有人知道如何做到这一点?

【问题讨论】:

  • 据我了解,matplotlib 没有真正的 3D 绘图,因此它可能无法自动删除落在球体内或被球体阻挡的“点”部分。您可以尝试使用原生 3D 的 mayavi,而不是编写自己的代码来执行此操作。

标签: python matplotlib


【解决方案1】:

需要知道螺旋、公式或点集的参数。

但是我发布了一个代码来在球体上绘制一条带有标记的线以供您开始:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_aspect('equal')

u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = 1 * np.outer(np.cos(u), np.sin(v))
y = 1 * np.outer(np.sin(u), np.sin(v))
z = 1 * np.outer(np.ones(np.size(u)), np.cos(v))
elev = 10.
rot = 80. / 180. * np.pi
ax.plot_surface(x, y, z,  rstride=1, cstride=1, color='y', linewidth=0, alpha=0.5)

# plot lines in spherical coordinates system
a = np.array([-np.sin(elev / 180 * np.pi), 0, np.cos(elev / 180 * np.pi)])
b = np.array([0, 1, 0])
b = b * np.cos(rot) + np.cross(a, b) * np.sin(rot) + a * np.dot(a, b) * (1 - np.cos(rot))
ax.plot(np.sin(u),np.cos(u),0,color='r', linestyle = '-', marker='o', linewidth=2.5)

ax.view_init(elev = elev, azim = 0)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2019-05-02
    • 2011-10-13
    相关资源
    最近更新 更多