Angenommen, ich habe einige Eingabedaten:
data = np.random.normal(loc=100,scale=10,size=(500,1,32))
hist = np.ones((32,20)) # initialise hist
for z in range(32):
hist[z],edges = np.histogram(data[:,0,z],bins=np.arange(80,122,2))
Ich kann es zeichnen mit imshow()
:
plt.imshow(hist,cmap='Reds')
bekommen:
Die x-Achsenwerte stimmen jedoch nicht mit den Eingabedaten überein (dh Mittelwert von 100, Bereich von 80 bis 122). Daher möchte ich die x-Achse ändern, um die Werte in anzuzeigen edges
.
Ich habe versucht:
ax = plt.gca()
ax.set_xlabel([80,122]) # range of values in edges
...
# this shifts the plot so that nothing is visible
und
ax.set_xticklabels(edges)
...
# this labels the axis but does not centre around the mean:
Irgendwelche Ideen, wie ich die Achsenwerte ändern kann, um die von mir verwendeten Eingabedaten widerzuspiegeln?
python
numpy
matplotlib
atomh33ls
quelle
quelle
pcolor
stattimshow
wie in dieser Antwort erwähnt .Antworten:
Ich würde versuchen, das Ändern
xticklabels
möglichst zu vermeiden , da es sonst sehr verwirrend werden kann, wenn Sie beispielsweise Ihr Histogramm mit zusätzlichen Daten überzeichnen.Das Definieren des Bereichs Ihres Rasters ist wahrscheinlich das Beste und
imshow
kann durch Hinzufügen desextent
Schlüsselworts erfolgen. Auf diese Weise werden die Achsen automatisch angepasst. Wenn Sie die Beschriftungen ändern möchten, würde ichset_xticks
mit vielleicht etwas Formatierer verwenden. Das direkte Ändern der Etiketten sollte der letzte Ausweg sein.fig, ax = plt.subplots(figsize=(6,6)) ax.imshow(hist, cmap=plt.cm.Reds, interpolation='none', extent=[80,120,32,0]) ax.set_aspect(2) # you may also use am.imshow(..., aspect="auto") to restore the aspect ratio
quelle
interpolation="none"
hier eine weitaus genauere Darstellung realer Daten verwendet wurde.Ich hatte ein ähnliches Problem und Google hat mich zu diesem Beitrag geschickt. Meine Lösung war etwas anders und weniger kompakt, aber hoffentlich kann dies für jemanden nützlich sein.
Das Anzeigen Ihres Bildes mit matplotlib.pyplot.imshow ist im Allgemeinen eine schnelle Möglichkeit, 2D-Daten anzuzeigen. Dies kennzeichnet jedoch standardmäßig die Achsen mit der Pixelanzahl. Wenn die 2D-Daten, die Sie zeichnen, einem einheitlichen Raster entsprechen, das durch die Arrays x und y definiert ist, können Sie die x- und y-Achsen mit matplotlib.pyplot.xticks und matplotlib.pyplot.yticks mit den Werten in diesen Arrays beschriften. Diese ordnen einige Beschriftungen, die den tatsächlichen Gitterdaten entsprechen, den Pixelzahlen auf den Achsen zu. Und das geht viel schneller als zum Beispiel mit pcolor.
Hier ist ein Versuch mit Ihren Daten:
import matplotlib.pyplot as plt # ... define 2D array hist as you did plt.imshow(hist, cmap='Reds') x = np.arange(80,122,2) # the grid to which your data corresponds nx = x.shape[0] no_labels = 7 # how many labels to see on axis x step_x = int(nx / (no_labels - 1)) # step between consecutive labels x_positions = np.arange(0,nx,step_x) # pixel count at label position x_labels = x[::step_x] # labels you want to see plt.xticks(x_positions, x_labels) # in principle you can do the same for y, but it is not necessary in your case
quelle