2D Histogramm Fehler beim erstellen der Colorbar

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
C#17
User
Beiträge: 19
Registriert: Montag 22. Mai 2017, 12:19

Hallo liebes Forum, ich möchte mir ein 2D Histogramm einer multivariate gaussian distribution anzeigen lassen und dieser dann eine Colorbar hinzufügen. Das Anzeigen klappt, aber das mit der Colorbar will nicht so richtig. Hier der Code:

Code: Alles auswählen

import matplotlib.pyplot as plt
import numpy as np


mean=[0,0]
cov=[[1,1],[1,2]]
x,y = np.random.multivariate_normal(mean,cov,10000).T

fig=plt.figure()
ax=plt.axes()

cax=ax.hist2d(x,y,bins=30,cmap="Blues")
cb=fig.colorbar(cax)
cb.ax.set_label("counts in bin")

plt.show()
Hier bringt er mir die Fehlermeldung:
AttributeError: 'tuple' object has no attribute 'autoscale_None'
Was mache ich falsch? Ich bin mir relativ sicher, dass es was damit zu tun hat. Vielleicht noch vorne weg, ich möchte die Methoden von ax und fig nutzen (objektorientiert) anstelle der Funktionen von plt.

Vielen Dank schonmal für die Antworten!!
Zuletzt geändert von Anonymous am Donnerstag 15. Juni 2017, 08:40, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@C#17: hast Du dir den Rückgabewert von hist2d schoneinmal angeschaut? Und was glaubst Du, kann colorbar damit anfangen?
__deets__
User
Beiträge: 14539
Registriert: Mittwoch 14. Oktober 2015, 14:29

C#17
User
Beiträge: 19
Registriert: Montag 22. Mai 2017, 12:19

Hallo,
... Rückgabewert liefert sozusagen 4 Werte und colormap weiss nicht was es machen soll.... Was mich aber dann verwirrt, wenn ich die plt.functions mit dem code

Code: Alles auswählen

 plt.hist2d(x, y, bins=30, cmap='Blues')
 cb = plt.colorbar()
 cb.set_label('counts in bin')
nehme, funktionert es.

Wie kann ich meinen Code anpassen dass es funktioniert?
Ich vermute ich muss der colormap nur mitteilen welchen der 4 Werte ( in diesem Fall den ersten == counts) Sie benutzen soll....mit

Code: Alles auswählen

cb=fig.colorbar(cax[0])
funktioniert es nicht....
C#17
User
Beiträge: 19
Registriert: Montag 22. Mai 2017, 12:19

Okay habs...

ich brauche nicht den Wert für counts sondern das image, das erhalte ich mit:

Code: Alles auswählen

cay=ax.hist2d(x,y,bins=30,cmap="Blues")
cb1=fig.colorbar(cay[3],label="count in bin")
Könnte mir aber jemand dennoch erklären warum ich "image" brauche und nicht "counts" wenn ich mir doch die Anzahl der counts ausgeben lassen möchte?
BlackJack

@C#17: Weil das Bild die `autoscale_None()`-Methode hat, deren fehlen bei den anderen Werten zu der Ausnahme „object has no attribute 'autoscale_None'“ geführt hat. Das Array mit den Anzahlen ist spezifisch für diesen Histogramm-Plot, `colorbar()` funktioniert ja aber auch mit anderen Plots, beispielsweise Contourplots, wo man nicht so ein Array mit Anzahlen hat.
Antworten