2013-03-07 19 views
19

Ich möchte die Matplotlib Colorbar Bereich festlegen. Hier ist, was ich bis jetzt habe:Einstellung matplotlib colorbar Bereich

import numpy as np 
import matplotlib.pyplot as plt 
x = np.arange(20) 
y = np.arange(20) 
data = x[:-1,None]+y[None,:-1] 

fig = plt.gcf() 
ax = fig.add_subplot(111) 

X,Y = np.meshgrid(x,y) 
quadmesh = ax.pcolormesh(X,Y,data) 
plt.colorbar(quadmesh) 

#RuntimeError: You must first define an image, eg with imshow 
#plt.clim(vmin=0,vmax=15) 

#AttributeError: 'AxesSubplot' object has no attribute 'clim' 
#ax.clim(vmin=0,vmax=15) 

#AttributeError: 'AxesSubplot' object has no attribute 'set_clim' 
#ax.set_clim(vmin=0,vmax=15) 

plt.show() 

Wie setze ich die colorbar Grenzen hier?

Antwort

24

Arg. Es ist immer das letzte, was du versuchst:

quadmesh.set_clim(vmin=0, vmax=15) 

funktioniert.

+6

Ich würde wirklich gerne ein tieferes Verständnis gewinnen, wie diese API tatsächlich funktioniert. Wenn mir jemand erklären kann, warum 'ax.set_xlim' funktioniert, aber' ax.set_clim' nicht vom Standpunkt der API funktioniert, würde ich es gerne hören (und ich bin mir sicher, dass andere viel bessere Antworten finden können - Also bitte erkläre mehr, wenn du kannst!) – mgilson

+4

Ich bin mir nicht sicher, ob das deine Frage beantwortet, aber wenn du 'quadmesh .__ class __. Mro()' betrachtest, wirst du sehen, dass die Klasse der quadmesh das 'ScalarMappable' Mixin hat . Wenn Sie in 'matplotlib/cm.py' nachsehen, sehen Sie, dass es der" ScalarMappable "-Mix ist, der das Colormapping verarbeitet, und bietet insbesondere die Methode' set_clim'. – unutbu

+3

Jeder (ScalarMappable) Künstler steuert seine eigene Farbe. Die Farbleiste ist an eine ScalarMappable (durch den Aufruf "plt.colorbar (quadmesh)") angehängt. Das Colormapping des Künstlers steuert also das Colormapping der Farbleiste. Es ist kein Axes-weites Colormapping. Daher hat "ax" kein Attribut "set_clim". – unutbu

4

Matplotlib 1.3.1 - Es sieht so aus, als würden die Farbbalken-Ticks nur gezeichnet, wenn die Farbleiste instanziert ist. Durch das Ändern der Farbbalkenlimits (set_clim) werden die Ticks nicht erneut gezeichnet.

Die Lösung, die ich fand, war, die Farbleiste im gleichen Achseneintrag wie die ursprüngliche Farbleiste erneut zu instanziieren. In diesem Fall war Achsen [1] die ursprüngliche Farbleiste. Es wurde eine neue Instanz der Farbleiste hinzugefügt, die mit cax = (Kindachsen) kwarg gekennzeichnet ist.

  # Reset the Z-axis limits 
      print "resetting Z-axis plot limits", self.zmin, self.zmax 
      self.cbar = self.fig.colorbar(CS1, cax=self.fig.axes[1]) # added 
      self.cbar.set_clim(self.zmin, self.zmax) 
      self.cbar.draw_all() 
Verwandte Themen