Matplotlib - 同时在 3D 中绘制平面和点 [英] Matplotlib - Plot a plane and points in 3D simultaneously

查看:36
本文介绍了Matplotlib - 同时在 3D 中绘制平面和点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 Matplotlib 在 3D 中同时绘制一个平面和一些点.我没有错误只是该点不会出现.我可以在不同时间绘制一些点和平面,但不能同时绘制.部分代码如下:

将 numpy 导入为 np导入 matplotlib.pyplot 作为 plt从 mpl_toolkits.mplot3d 导入 Axes3D点 = np.array([1, 2, 3])正常 = np.array([1, 1, 2])point2 = np.array([10, 50, 50])# 一个平面是 a*x+b*y+c*z+d=0# [a,b,c] 是正常的.因此,我们必须计算# d 我们准备好了d = -point.dot(正常)# 创建 x,yxx, yy = np.meshgrid(range(10), range(10))# 计算对应的zz = (-normal[0] * xx - normal[1] * yy - d) * 1./normal[2]# 绘制曲面plt3d = plt.figure().gca(projection='3d')plt3d.plot_surface(xx, yy, z, alpha=0.2)#我想绘制这一点:ax.scatter(point2[0], point2[1], point2[2], color='green')plt.show()

解决方案

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

更新

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

I m trying to plot simultaneously a plane and some points in 3D with Matplotlib. I have no errors just the point will not appear. I can plot at different times some points and planes but never at same time. The part of the code looks like :

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()

解决方案

You will need to tell the axes that you want new plots to add to the current plots on the axes rather than overwriting them. To do this, you will need to use 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')

UPDATE

As @tcaswell pointed out in the comments, they are considering discontinuing support for hold. As a result, a better approach may be to use the axes directly to add more plots as in @tom's answer.

这篇关于Matplotlib - 同时在 3D 中绘制平面和点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆