matplotlib polar 2d histogram

histogram, matplotlib

Solution

Your code works if you explicitly pass a mgrid (with similar characteristics than your a bins and sbins) to the pcolormesh command.

Below is an example inspired by your code:

import matplotlib.pyplot as plt
import numpy as np

#Generate the data
size = 200

baz = 10*np.random.randint(20, 25, size)*np.pi/180.
freq = 10*np.random.randint(1, 10, size)
pwr = 10*np.random.randint(-10, -1, size)

abins = np.linspace(0, 2*np.pi, 360)      # 0 to 360 in steps of 360/N.
sbins = np.linspace(1, 100, 50) 
H, xedges, yedges = np.histogram2d(baz, freq, bins=(abins,sbins), weights=pwr)

#Grid to plot your data on using pcolormesh
theta, r = np.mgrid[0:2*np.pi:360j, 1:100:50j]

fig, ax = plt.subplots(figsize=(14,14), subplot_kw=dict(projection='northpolar'))
ax.pcolormesh(theta, r, H)

ax.set_yticklabels([]) #remove yticklabels

plt.show()

Problem

I am trying to plot some histogrammed data on a polar axis but it wont seem to work properly. An example is below, I use the custom projection found How to make the angles in a matplotlib polar plot go clockwise with 0° at the top? it works for a scatter plot so I think my problem is with the histogram function. This has been driving me nuts all day, does anyone know what I am doing wrong........... ``` import random import numpy as np import matplotlib.pyplot as plt baz = np.zeros((20)) freq = np.zeros((20)) pwr = np.zeros((20)) for x in range(20): baz[x] = random.randint(20,25)*10 freq[x] = random.randint(1,10)*10 pwr[x] = random.randint(-10,-1)*10 baz = baz*np.pi/180. abins = np.linspace(0,2*np.pi,360) # 0 to 360 in steps of 360/N. sbins = np.linspace(1, 100) H, xedges, yedges = np.histogram2d(baz, freq, bins=(abins,sbins), weights=pwr) plt.figure(figsize=(14,14)) plt.subplot(1, 1, 1, projection='northpolar') #plt.scatter(baz, freq) plt.pcolormesh(H) plt.show() ```

Original source