El histogtwig matplotlib 2D parece transpuesto

Tengo el siguiente código para trazar un histogtwig 2d en pyplot:

#!/usr/bin/env python import numpy as np import matplotlib.pyplot as plt MIN, MAX, num = .001, 5000, 500 minn=1 maxx=1000 zbins = 10 ** np.linspace(np.log10(MIN), np.log10(MAX), num) x=np.linspace(100,600,50000) y=np.linspace(0,500,50000) fig1 = plt.figure(1) counts1,xedges1,edges1,d=plt.hist2d(x,y,bins=zbins) mesh1 = plt.pcolormesh(zbins, zbins, counts1) plt.xlim([minn, maxx]) plt.ylim([minn, maxx]) plt.gca().set_xscale("log") plt.gca().set_yscale("log") plt.colorbar() plt.show() 

¡Disculpas por mi horrible denominación de variables!

De todos modos, cuando grafico esto, el histogtwig parece tener los ejes x e y cambiados. Revisé la documentación de matplotlib 2d hist y estaba seguro de que tenía los argumentos x e y en el orden correcto, pero no puedo, por mi vida, averiguar dónde me estoy equivocando. Cualquier ayuda sería muy apreciada!

La confusión proviene del hecho de que la matriz de counts devueltos no es lo que usted cree que es.

plt.hist2d utiliza internamente numpy.histogram2d para calcular el histogtwig bidimensional. La documentación establece como valores de retorno:

H : ndarray, shape (nx, ny) El histogtwig bidimensional de las muestras x e y. Los valores en x están histogtwigdos a lo largo de la primera dimensión y los valores en y están histogtwigdos a lo largo de la segunda dimensión .
xedges : ndarray, shape (nx,) Los bordes del contenedor a lo largo de la primera dimensión.
yedges : ndarray, shape (ny,) Los bordes del contenedor a lo largo de la segunda dimensión.

Aparte del hecho de que parece haber un error con respecto a la forma exacta de las matrices , vemos que la primera dimensión de la matriz de histogtwig devuelta es x y la segunda y .

Sin embargo, matplotlib siempre espera que y sea ​​la primera dimensión . Por lo tanto, mientras plt.hist2d produce el gráfico correcto, plt.pcolormesh necesita una versión transpuesta de la matriz.

 plt.pcolormesh(X,Y, counts.T) 

Un ejemplo completo, comparando plt.hist2d y plt.pcolormesh :

 import numpy as np import matplotlib.pyplot as plt x=np.linspace(1,10,10) y=np.linspace(6,9,10) zbinsx= np.linspace(0,10,11) zbinsy= np.linspace(5,10,6) fig, (ax, ax2) = plt.subplots(ncols=2) counts,xedges,yedges,d = ax.hist2d(x,y, bins=[zbinsx,zbinsy]) # counts has shape (10, 5) X,Y = np.meshgrid(xedges,yedges) mesh1 =ax2.pcolormesh(X,Y, counts.T) plt.show() 

introduzca la descripción de la imagen aquí