Python 如何在matplotlib polar 2D直方图中创建曲线箱?

Python 如何在matplotlib polar 2D直方图中创建曲线箱?,python,python-3.x,numpy,matplotlib,histogram2d,Python,Python 3.x,Numpy,Matplotlib,Histogram2d,我正在使用matplotlib和以下代码(改编自)在Python 3.7中绘制极轴2d直方图: 要生成以下绘图: 由于箱子尺寸较大,极轴投影看起来更像一个多边形,而不是一个圆 有没有办法绘制这样的图,使垃圾箱看起来是弯曲的而不是笔直的?也就是说,无论箱子大小如何,绘图始终是圆形的,不会像箱子更大时变成多边形 matplotlib解决方案更可取,但也欢迎其他解决方案 非常感谢您的帮助。要获得圆形外观,可以将网格细分为更多角度。请注意np.linspace(0,2*np.pi,10)创建9个存储箱

我正在使用matplotlib和以下代码(改编自)在Python 3.7中绘制极轴2d直方图:

要生成以下绘图:

由于箱子尺寸较大,极轴投影看起来更像一个多边形,而不是一个圆

有没有办法绘制这样的图,使垃圾箱看起来是弯曲的而不是笔直的?也就是说,无论箱子大小如何,绘图始终是圆形的,不会像箱子更大时变成多边形

matplotlib解决方案更可取,但也欢迎其他解决方案


非常感谢您的帮助。

要获得圆形外观,可以将网格细分为更多角度。请注意
np.linspace(0,2*np.pi,10)
创建9个存储箱(和10个边界)。对于细分网格,您需要90个容器,因此需要91个边界。直方图值需要以相同的因子重复

下面的代码使用不同的颜色映射进行调试。可选栅格高亮显示原始边界

将numpy导入为np
将matplotlib.pyplot作为plt导入
#输入数据
方位角=np.随机随机随机数(3000)*2*np.pi
半径=np.随机瑞利(9,尺寸=3000)
#宾宁
rbins=np.linspace(0,radius.max(),7)
abins=np.linspace(0,2*np.pi,10)
细分v=10
abins2=np.linspace(0,2*np.pi,(len(abins)-1)*subdivs+1)
#直方图
hist,u,uu=np.histogram2d(方位角、半径、箱位=(abins、rbins))
A1,R1=np.meshgrid(abins,rbins)
A2,R2=np.网格网格(abins2,rbins)
图(ax1,ax2)=plt.子批次(ncols=2,figsize=(10,4),子批次(projection=“polar”))
#使用原始网格打印
pc1=ax1.pcolormesh(A1,R1,hist.T,cmap='hsv')
ax1.勾选参数(轴为y,标签颜色为白色)
ax1.set_xticks(abins[:-1])
图颜色条(pc1,ax=ax1)
#细分网格绘图
pc2=ax2.pcolormesh(A2、R2、np.repeat(历史T、细分V、轴=1),cmap='hsv')
ax2.勾选参数(轴为y,标签颜色为白色)
ax2.set_xticks(abins[:-1])
ax2.set_yticks(rbins,minor=True)
ax2.网格(轴='x',颜色='白色')
ax2.栅格(轴为y轴,哪个轴为次轴,颜色为白色)
图颜色条(pc2,ax=ax2)
plt.紧_布局()
plt.show()

import numpy as np
import matplotlib.pyplot as plt

# input data
azimut = np.random.rand(3000)*2*np.pi
radius = np.random.rayleigh(9, size=3000)

# binning
rbins = np.linspace(0, radius.max(), 10)
abins = np.linspace(0, 2*np.pi, 10)

# histogram
hist, _, _ = np.histogram2d(azimut, radius, bins=(abins, rbins))
A, R = np.meshgrid(abins, rbins)

# plot
fig, ax = plt.subplots(subplot_kw=dict(projection="polar"))

pc = ax.pcolormesh(A, R, hist.T, cmap='inferno')
fig.colorbar(pc)

plt.show()