【问题标题】:Plotting a wire frame sphere using MatPlotLib使用 MatPlotLib 绘制线框球体
【发布时间】:2016-06-19 23:43:42
【问题描述】:

使用 MatPlotLib,我想通过绘制一组球坐标来绘制一个球体。我已经完成了一半,但我无法完全实现我想要的。

到目前为止,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d

theta, phi = np.linspace(0, 2 * np.pi, 13), np.linspace(0, np.pi, 7)
THETA, PHI = np.meshgrid(theta, phi)
R = 1.0
X = R * np.sin(PHI) * np.cos(THETA)
Y = R * np.sin(PHI) * np.sin(THETA)
Z = R * np.cos(PHI)
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
plot = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, linewidth=0, color='white', antialiased=False, alpha=1, frameon=False)

plt.show()

产生以下情节:

我现在想做的,是以下两件事:

  1. 停止对每个表面进行着色,使所有表面的颜色相同(白色)。取而代之的是,在每个表面之间画一条线(黑色)。通过这种方式,球体应该看起来像一个线框,而不是一个带阴影的实体对象。我在ax.plot_surface(...) 中尝试过shade=False,这让我停止了阴影——但所有表面最终都是相同的颜色,所以没有线框,你无法区分每个表面。

  2. 从图中移除坐标轴,使球体独立存在。我在ax.plot_surface(...) 中尝试过frameon=False,但这给了我错误:AttributeError: Unknown property frameon

有什么帮助吗?

谢谢!

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:
    1. 设置 shade=False,但也将 linewidth 设置为 0 以外的任何值(例如 linewidth=1)。 (或者,使用ax.plot_wireframe() 而不是ax.plot_surface()。)

    2. ax.set_axis_off() 关闭轴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2012-05-19
      • 2016-09-27
      • 2022-08-05
      • 2020-06-20
      相关资源
      最近更新 更多