Matplotlib - 同时在 3D 中绘制平面和点

新手上路,请多包涵

我正在尝试使用 Matplotlib 在 3D 中同时绘制一个平面和一些点。我没有错误只是点不会出现。我可以在不同时间绘制一些点和平面,但绝不能同时绘制。代码的一部分看起来像:

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

point  = np.array([1, 2, 3])
normal = np.array([1, 1, 2])

point2 = np.array([10, 50, 50])

# a plane is a*x+b*y+c*z+d=0
# [a,b,c] is the normal. Thus, we have to calculate
# d and we're set
d = -point.dot(normal)

# create x,y
xx, yy = np.meshgrid(range(10), range(10))

# calculate corresponding z
z = (-normal[0] * xx - normal[1] * yy - d) * 1. /normal[2]

# plot the surface
plt3d = plt.figure().gca(projection='3d')
plt3d.plot_surface(xx, yy, z, alpha=0.2)

#and i would like to plot this point :
ax.scatter(point2[0] , point2[1] , point2[2],  color='green')

plt.show()

原文由 user3601754 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 745
2 个回答

您需要告诉轴您希望将新图 添加 到轴上的当前图,而不是覆盖它们。为此,您需要使用 axes.hold(True)

 # plot the surface
plt3d = plt.figure().gca(projection='3d')
plt3d.plot_surface(xx, yy, z, alpha=0.2)

# Ensure that the next plot doesn't overwrite the first plot
ax = plt.gca()
ax.hold(True)

ax.scatter(points2[0], point2[1], point2[2], color='green')

在此处输入图像描述

更新

正如 @tcaswell 在评论中指出的那样,他们正在考虑停止支持 hold 。因此,更好的方法可能是直接使用轴来添加更多图,如 @tom 的回答。

原文由 Suever 发布,翻译遵循 CC BY-SA 3.0 许可协议

只是为了添加@suever 的回答,你没有理由不能创建 Axes 然后在其上绘制曲面和散点。那么就不需要使用 ax.hold()

 # Create the figure
fig = plt.figure()

# Add an axes
ax = fig.add_subplot(111,projection='3d')

# plot the surface
ax.plot_surface(xx, yy, z, alpha=0.2)

# and plot the point
ax.scatter(point2[0] , point2[1] , point2[2],  color='green')

原文由 tmdavison 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题