Seite 1 von 1

2D Histogramm Fehler beim erstellen der Colorbar

Verfasst: Donnerstag 15. Juni 2017, 08:23
von C#17
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!!

Re: 2D Histogramm Fehler beim erstellen der Colorbar

Verfasst: Donnerstag 15. Juni 2017, 10:07
von Sirius3
@C#17: hast Du dir den Rückgabewert von hist2d schoneinmal angeschaut? Und was glaubst Du, kann colorbar damit anfangen?

Re: 2D Histogramm Fehler beim erstellen der Colorbar

Verfasst: Donnerstag 15. Juni 2017, 10:07
von __deets__

Re: 2D Histogramm Fehler beim erstellen der Colorbar

Verfasst: Donnerstag 15. Juni 2017, 10:41
von C#17
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....

Re: 2D Histogramm Fehler beim erstellen der Colorbar

Verfasst: Donnerstag 15. Juni 2017, 10:44
von C#17
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?

Re: 2D Histogramm Fehler beim erstellen der Colorbar

Verfasst: Donnerstag 15. Juni 2017, 10:51
von 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.