2016-06-01 21 views
0

Ich arbeite an Python mit der matplotlib-Bibliothek und ich habe ein Problem mit Farbkarten Dimension.Forcieren einer Colormap, um quadratisch zu sein

Ich habe einige Zielvariable, die targetx und y auf zwei Variablen abhängt - d.h. meine Daten target ist eine Matrix mit den variablen x wobei Reihen und Spalten y. Ich möchte target in einer Farbkarte in Bezug auf x und y darstellen. Das Problem ist, dass ich mehr Werte für x als für y habe, wenn ich also eine Farbkarte plotte, bekomme ich ein Rechteck - ein ziemlich hässliches, weil ich viel mehr Werte für x als für y habe.

Ich hätte lieber rechteckige "Pixel" in der Farbkarte und eine quadratische Karte, anstatt quadratische "Pixel", sondern eine rechteckige Farbkarte - oder zumindest möchte ich die beiden Visualisierungen vergleichen.

Meine Frage ist: Wie kann ich die Farbkarte zwingen, quadratisch zu sein?

Dies ist meine aktuellen Code - die cmap Variable einfach ermöglicht es mir, meine eigene Farbskala zu definieren:

import matplotlib.pyplot as plt 
import matplotlib.pyplot as clr 

target = ... 

cmap = clr.LinearSegmentedColormap.from_list('custom blue', 
              ['#DCE6F1','#244162'], 
              N=128) 
plt.matshow(target, cmap=cmap) 
plt.colorbar(cmap='custom blue') 

Antwort

1

Andreas Antwort funktioniert auf meinem Computer. Sie könnten ein etwas anderes Ergebnis mit Ihrem Code sehen, da imshow() standardmäßig das Bild interpoliert, daher wird das Bild anders aussehen als bei matshow(). Aber der Parameter aspect funktioniert auf beiden. Also füttern Sie es entweder zur matshow(), oder deaktivieren Sie die Interpolation in imshow():

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.matshow(np.random.rand(32, 64), cmap='rainbow', aspect=2) 
plt.show() 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.imshow(np.random.rand(32, 64), cmap='rainbow', aspect=2, interpolation="None") 
plt.show() 
1

Was ist Ihre matplotlib Version? Wenn es neuer als 1.1.0 ist, dann können Sie dies versuchen:

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.imshow(np.random.rand(32, 64), cmap='rainbow', aspect=2) 
plt.show() 

enter image description here

Dies gibt Ihnen rechteckige Pixel mit quadratischer Figur Form. Sie sollten durch Ihre Daten ersetzen und das gewünschte Seitenverhältnis definieren. Siehe auch post. Es gibt andere Lösungen, die Sie interessieren könnten.