我正在使用Matplotlib创建极坐标直方图。直方图的正确数据(以弧度为单位)如下:
对齐方式为[0,0.78)弧度(也就是0至45度)[0.78,...)(45至90度)等。
但是,使用极坐标图进行绘制时,垃圾箱现在位于0中心,而不是从0开始。但是直方图计数是相同的。
如果实际上是(-22.5度,22.5度),则直方图分布将有所不同。因此,极坐标轴标签似乎不正确-即0度标签实际上应该是22.5度(或者0度标签应该顺时针移动22.5度)。
有人知道如何实现这一目标吗?
相关代码: 直方图
bins = np.linspace(-np.pi, np.pi, bins_number + 1)
n, _, _ = plt.hist(angles, bins) # Create histogram
plt.show()
注意,角度是弧度的角度列表
极地
plt.clf()
width = 2 * np.pi / bins_number
ax = plt.subplot(1, 1, 1, projection='polar')
bars = ax.bar(bins[:bins_number], n, width=width, bottom=0.0)
for bar in bars:
bar.set_alpha(0.5)
plt.show()
完整代码
import numpy as np
import matplotlib.pyplot as plt
import csv
with open('circ2.csv', 'r') as f:
reader=csv.reader(f)
angles=[] # Initialise empty list
next(reader) # Skip header line
for row in reader:
angle = float(row[1]) # Angle is in the second column of the row
angles.append(angle)
bins_number = 8 # the [-180, 180) interval will be subdivided into this
bins = np.linspace(-np.pi, np.pi, bins_number + 1)
n, _, _ = plt.hist(angles, bins) # Create histogram
plt.clf()
width = 2 * np.pi / bins_number
ax = plt.subplot(1, 1, 1, projection='polar')
bars = ax.bar(bins[:bins_number], n, width=width, bottom=0.0)
for bar in bars:
bar.set_alpha(0.5)
plt.show()
谢谢
答案 0 :(得分:1)
通过在条形图中添加align='edge'
来解决。那就是:
bars = ax.bar(bins[:bins_number], n, width=width, bottom=0.0, align='edge')