Matplotlib极坐标直方图已移动了分箱

时间:2018-08-16 07:07:21

标签: python matplotlib histogram

我正在使用Matplotlib创建极坐标直方图。直方图的正确数据(以弧度为单位)如下:

Histogram Plot

对齐方式为[0,0.78)弧度(也就是0至45度)[0.78,...)(45至90度)等。

但是,使用极坐标图进行绘制时,垃圾箱现在位于0中心,而不是从0开始。但是直方图计数是相同的。

Radial Plot

如果实际上是(-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()

谢谢

1 个答案:

答案 0 :(得分:1)

通过在条形图中添加align='edge'来解决。那就是:

bars = ax.bar(bins[:bins_number], n, width=width, bottom=0.0, align='edge')

感谢ImportanceOfBeingErnest