创建极坐标直方图网格 (python)

Creating a grid of polar histograms (python)

我想创建一个如下图所示的子图, 它应该包含 25 个极坐标直方图,我希望将它们一个一个地添加到图中。 需要在 python。 我已经想到我需要使用 matplotlib,但似乎无法完全弄清楚。

非常感谢!

您可以通过 projection='polar' 创建极轴网格。

hist 创建直方图,在使用极轴时也是如此。请注意,x 以弧度为单位,范围为 2π。当您将 bin 明确指定为从 0 到 2π(或从 -π 到 π,具体取决于数据)的 linspace 时,效果最佳。 linspace 的第三个参数应该比您想要的整个圆的柱数多一。

关于axs[i][j].hist(x, bins=np.linspace(0, 2 * np.pi, np.random.randint(7, 30), endpoint=True), color='dodgerblue', ec='black')的确切参数:

  • axs[i][j] 在第 i 行的第 j 个子图中绘制
  • .hist 创建直方图
  • x:放入 bins 的值
  • bins=:进入 bins(最低和最高之间的固定数字 x 或一些明确的边界;默认为 10 个固定边界)
  • np.random.randint(7, 30) 7 到 29 之间的随机整数
  • np.linspace(0, 2 * np.pi, n, endpoint=True)将0到2π之间的范围分成n等份; endpoint=True 在 0、2π 和两者之间的 n-2 位置处设置边界;当 endpoint=False 将在 0 处有一个边界,在中间的 n-1 个位置,但在末尾 none
  • color='dodgerblue':直方图条的颜色会偏蓝
  • ec='black':条形的边缘颜色将为黑色
import numpy as np
import matplotlib.pyplot as plt

fig, axs = plt.subplots(5, 5, figsize=(8, 8),
                        subplot_kw=dict(projection='polar'))
for i in range(5):
    for j in range(5):
        x = np.random.uniform(0, 2 * np.pi, 50)
        axs[i][j].hist(x, bins=np.linspace(0, 2 * np.pi, np.random.randint(7, 30)), color='dodgerblue', ec='black')

plt.tight_layout()
plt.show()