Matplotlib color in 3d graphics from a dataset x, y, z without using a path

In life, I cannot figure out how to get the same results as this .

The link generates a 3D color graph without using an outline. If I use the same technique, but with my own dataset x, y, z, I get only one color.

The difference should be in how I generate the z data for the graph.

Anyway, using this:

from mpl_toolkits.mplot3d import Axes3D from matplotlib.mlab import griddata from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np import sys def xyz_ret(file): f = open(file, 'r') xyz = [] for i in f: ret = i.replace('\n','') xyz.append(map(float,(ret.split('\t')))) xyz = np.array(xyz) return xyz[:,0],xyz[:,1],xyz[:,2] x,y,z = xyz_ret('300.txt') fig = plt.figure() ax = fig.add_subplot(111, projection='3d') xi = np.linspace(min(x), max(x)) yi = np.linspace(min(y), max(y)) X, Y = np.meshgrid(xi, yi) Z = griddata(x, y, z, xi, yi) surf = ax.plot_surface(X, Y, Z, rstride=6, cstride=6, cmap=cm.jet, linewidth=0) ax.set_zlim3d(min(z), max(z)) ax.w_zaxis.set_major_locator(LinearLocator(10)) ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f')) fig.colorbar(surf, shrink=0.5, aspect=5) plt.show() 

Data set:

 -2187.99902 9380.009151 0.0209 -2187.00111 2474.994061 0.022 -10755.98931 6119.598968 0.0296 -5781.347693 609.427388 0.0301 -8761.562524 1942.391853 0.0285 -5695.576244 1894.624701 0.0251 -3801.215106 1096.153308 0.0257 -1616.821487 2452.940102 0.0182 -5790.547537 2975.622971 0.022 -8095.18467 4074.330871 0.0208 -9997.367785 2771.330212 0.0264 -10547.5635 4397.127096 0.0251 -5781.706776 3984.545588 0.0191 -3346.855289 4347.670408 0.0172 -918.639762 4518.515925 0.0142 -892.428381 5850.710005 0.0143 -5844.499993 6516.904257 0.0204 -10877.96951 6015.755723 0.0265 -10813.37291 7704.306099 0.0302 -7991.878303 7733.626264 0.0223 -5861.073574 8725.943697 0.0217 -3188.107715 6997.19893 0.0206 -897.427629 7474.426336 0.0188 -1388.841321 8786.642046 0.0194 -3370.72325 8825.154803 0.0225 -8561.226722 8851.111988 0.0285 -10275.58972 8849.798032 0.0341 -5853.645621 10113.77051 0.0255 -8101.002878 10754.8429 0.0332 -5765.080546 11378.95524 0.0299 -3081.969839 10549.46676 0.0242 

Only one color is displayed. Also note that there are no ticks in the color bar.

Can you explain what my problem is?

+6
python matplotlib
Dec 06 '10 at 6:32
source share
3 answers

I think there is a problem with filling the "intermittent" surface (griddata). alt text

the code:

 from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import matplotlib.pyplot as plt from matplotlib.mlab import griddata import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') data = np.genfromtxt('300.txt') x = data[:,0] y = data[:,1] z = data[:,2] xi = np.linspace(min(x), max(x)) yi = np.linspace(min(y), max(y)) X, Y = np.meshgrid(xi, yi) Z = griddata(x, y, z, xi, yi) surf = ax.plot_surface(X, Y, Z, rstride=5, cstride=5, cmap=cm.jet, linewidth=1, antialiased=True) ax.set_zlim3d(np.min(Z), np.max(Z)) fig.colorbar(surf) plt.show() 

Note that if you are viewing a surface over a rectangular area (xi x yi) , this code works correctly. In other words, if you “cut” irregular edges.

 xi = np.linspace(-4000, -9000) yi = np.linspace(4000, 9000) 

alt text

+16
Dec 06 2018-10-12T00:
source share
— -

The easiest way to read text data is through genfromtxt:

 data = np.genfromtxt('300.txt') x = data[:,0] y = data[:,1] z = data[:,2] 

sys not required.

+2
Dec 06 '10 at 8:59
source share

I just struggled with a similar problem.

Finally, I had to use natgrid (which is referenced here , but the link doesn't work) instead of griddata.

for me, the trick with the cut of the plot area did not work, it was always in the same color.

When installing PyNGL, verify that you have the latest version of numpy installed.

Good luck.

+2
May 30 '12 at 9:49
source share



All Articles