matplotlib - 创建极坐标直方图网格(python)
问题描述
我希望创建一个如下图所示的子图,它应该包含 25 个极坐标直方图,我希望将它们一一添加到图中。需要在python中。我已经认为我需要使用 matplotlib,但似乎无法完全弄清楚。
多谢!
解决方案
您可以通过创建极轴网格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()
推荐阅读
- java - 无法连接到我在 tomcat 服务器中的电报机器人
- python - 如何在 TF Hub Module 中访问 BERT 中间层输出?
- node.js - 如何使用 node.js 使 Slack 机器人在同一频道动态回复
- javascript - 根据特定元素对数组进行排名
- javascript - 如何在adonis js中使用数据库[事务,提交,回滚]
- angular - Angular Router.navigate 使用 queryParams 导航到子路由
- azure-devops - Azure DevOps 部署组 - 是否可以忽略离线目标?
- android - 无法在 google setupwizard 中获取服务器播放自动安装应用程序
- javascript - 将对象分离到对象数组
- reactjs - 需要帮助来使用 redux 调用操作以及在单个 Click 事件上更新组件状态?