在python中使用mplot3d绘制透明平面

时间:2019-07-11 03:16:05

标签: python numpy matplotlib

我想显示3d绘图数据之间的分隔。就像在Z = 100曲面的顶部和底部之间进行划分一样。

这是我的代码:

# x, y, t are lists of points that shows (x,y) coordinate of an object at time t

cor_x = np.poly1d(np.polyfit(t, x, 5))
cor_y = np.poly1d(np.polyfit(t, y, 5))

ax = plt.axes(projection="3d")
ax.plot3D(cor_x(t), cor_y(t), t)
plt.show() 

我想要的只是一个透明的z = 100曲面。

1 个答案:

答案 0 :(得分:1)

如果要绘制表面,请使用ax.plot_surface(X, Y, Z)。其中X,Y是使用np.meshgrid创建的2d网格,Z是同一网格上的数据。可以通过获取数据并乘以零并加100来使z = 100曲面。

您可以使用alpha更改透明度。请注意,透明度越高,越难发现,这可能不是分离数据的最佳方法。

这里是一个例子。

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

def f(x, y):
    return x**2 + y**2

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


x = y = np.arange(-10.0, 10.0, .1)
X, Y = np.meshgrid(x, y)

Z = f(X,Y)

ax.plot_surface(X, Y, Z,color='gray',alpha=.8)


#To plot the surface at 100, use your same grid but make all your numbers zero
Z2 = Z*0.+100
ax.plot_surface(X, Y, Z2,color='r',alpha=.3) #plot the surface

plt.show()

enter image description here