Search code examples
pythonmatplotlibplotsurfacecolormap

Matplotlib surface plot showing same color for different values


Why do all points get the same value? I would like color to vary with energy.

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
from numpy import *

x = linspace(0.2, 2, 11)
y = linspace(0.1, 1, 11)
alpha, beta = meshgrid(x,y)
energy = matrix(loadtxt('energyPlotfileN6.txt'))

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(alpha, beta, energy, cmap='summer', vmin=energy.min(), vmax=energy.max())
plt.xlabel("alpha")
plt.ylabel("beta")
ax.set_zlabel("energy")
plt.show()

The result is shown below

Surface plot without desired colour mapping


Solution

  • Used the answer from above (add the cstride and rstride arguments), but wanted to add a visualization of the difference...

    In my case I'm plotting terrain...

    No stride:

    surf = ax.plot_surface(topo['lon'], topo['lat'], topo['value'],
                           cmap='terrain', vmax=2800, vmin=1300,
                           linewidth=.1, antialiased=False)
    

    enter image description here

    With stride:

    surf = ax.plot_surface(topo['lon'], topo['lat'], topo['value'],
                               cmap='terrain', vmax=2800, vmin=1300,
                               linewidth=.1, antialiased=False,
                               rstride=1, cstride=1)
    

    enter image description here