首页 > 解决方案 > 创建极坐标直方图网格(python)

问题描述

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

在此处输入图像描述

多谢!

标签: matplotlibhistogram

解决方案


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

hist创建直方图,在使用极轴时也是如此。请注意,x 以弧度表示,范围为 2π。当您将 bin 明确指定为linspace从 0 到 2π(或从 -π 到 π,具体取决于数据)时,它的效果最佳。的第三个参数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]在第th 行的j第 th 子图上绘制i
  • .hist创建直方图
  • x: 放入 bin 的值
  • 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在两者之间的位置但最后没有边界
  • 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()

极坐标直方图网格


推荐阅读