Ariaramnes
Ariaramnes

Reputation: 963

matplotlib's colormap

I'm new to python and after installing it I've accomplished to plot my 3d data using matplotlib. Sadly the only thing I don't know how to get done is the color part. My image just shows the surface but doesn't use the color bar at all. Here is my code.

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
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('Uizq.txt')
x = data[:,0]
y = data[:,1]
z = data[:,2]

xi = np.linspace(min(x), max(x))
yi = np.linspace(min(y), max(y))

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('U')

X, Y = np.meshgrid(xi, yi)
Z = griddata(x, y, z, xi, yi)
ax.set_zlim3d(np.min(Z), np.max(Z))


surf = ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap=cm.jet,
                   linewidth=0.5, antialiased=False)

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.show()

plot

you can obviously see that it is all blue, and I want to relate the color with "U" using the full cm.jet spectrum. This might be a very noob question, so sorry if you rolled your eyes.

Upvotes: 2

Views: 2186

Answers (1)

tacaswell
tacaswell

Reputation: 87556

Add the line

surf.set_clim([np.min(Z),np.max(Z)])

before you add the color bar.

It seems that the 3D plotting does not take into account the masking, so you are including NaN in the data, which confuses the automatic color limits.

Upvotes: 2

Related Questions