I have the following data: https://www.dropbox.com/s/u7ee09chaixw5vb/draw?dl=0
it is saved using pickle in python3 and it is just a two dimensional python list, in the form of z=[[],[],[]...[]]
and I use the following code to plot the 3D graph, but it only shows me black surface, why? xydict
can be loaded from the file above:
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)
There are a few problems with both your data and the arguments you used. The shape of your surface is extremely unequal and you are requesting one rstride
for every line. The result is that you only see the black from the strides.
The other problem is that you seem to have nan
values in your data. Should you limit the data to the valid values and pick better stride
numbers you should obtain a far better plot. For instance this:
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()
, results in this:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.