[英]Matplotlib: Show Backgroundimage in 3D Graph with plot_Surface
[英]matplotlib 3D plot, plot_surface black
我有以下数据: https : //www.dropbox.com/s/u7ee09chaixw5vb/draw?dl = 0
它是使用python3中的pickle保存的,它只是一个二维python列表,格式为z=[[],[],[]...[]]
我使用下面的代码绘制3D图形,但它只显示黑色表面,为什么? 可以从上面的文件加载xydict
:
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(0, len(xydict))
Y = np.arange(0, len(xydict[0]))
X, Y = np.meshgrid(X, Y)
Z = np.array(xydict).T
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.hot)
# ax.contourf(X, Y, Z, zdir='z', offset=0, cmap=plt.cm.hot)
ax.set_zlim(0,1)
plt.savefig('plot3d_ex.png', dpi=480)
您的数据和您使用的参数都存在一些问题。 你表面的形状是非常不平等的,你是一个请求rstride
的每一行。 结果是你只能看到步幅中的黑色。
另一个问题是您的数据中似乎有nan
值。 如果您将数据限制为有效值并选择更好的stride
数字,您应该获得更好的情节。 例如:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import pickle
with open('draw', 'rb') as pickle_file:
xydict = pickle.load(pickle_file)
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(0, len(xydict))
Y = np.arange(0, len(xydict[0]))
X, Y = np.meshgrid(X, Y)
Z = np.array(xydict).T
ax.plot_surface(X[:,:-2], Y[:,:-2], Z[:,:-2], rstride=100, cstride=1, cmap=plt.cm.hot)
# ax.contourf(X, Y, Z, zdir='z', offset=0, cmap=plt.cm.hot)
ax.set_zlim(0,1)
plt.show()
,结果如下:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.