带极轴的条形图

Tri*_*ima 5 python matplotlib python-3.x polar-coordinates

我想让我的情节与此类似-

在此处输入图片说明

目前,我能得到的是:

在此处输入图片说明

我无法执行以下操作:

  1. 获取内圈内的时间标签
  2. 获取圆圈内的刻度。这个问题 - How to create minor ticks for polar plot matplotlib,有一个我尝试过的想法,但它与情节的其他部分搞砸了。
  3. 时间标签仅在步长为 3 时才能正常工作。对于其他步长,它不会与条形对齐。

以下是生成绘图的可重现代码

arr = np.random.randint(0, 24, size = 50000)
df = pd.DataFrame({"COL": arr}).COL.value_counts().sort_index()

N = 24
bottom = 1000
theta, width = np.linspace(0.0, 2 * np.pi, N, endpoint=False, retstep=True)

plt.figure(figsize = (10, 6))
ax = plt.subplot(111, polar=True)

bars = ax.bar(
    theta, df,
    width=width-0.03,
    bottom=bottom,
    color="#f39c12", edgecolor="black"
)
bars = ax.bar(
    theta, [3000]*24,
    width=width-0.03,
    bottom=bottom,
    color="#f39c12", alpha=0.2
)

ax.set_theta_zero_location("N")
ax.set_theta_direction(-1)
ax.grid(False)
ax.spines['polar'].set_visible(False)
ax.set_rticks([])

ticks = [f"{i}:00" for i in range(0, 24, 3)]
ax.set_xticklabels(ticks)

_ = ax
Run Code Online (Sandbox Code Playgroud)

小智 1

我只是画了两条线和一个圆圈来制作“时钟图标”

## Draw a "clock" icon inside of the graph
##lines for hands of a clock
x1, y1 = [0, 90], [0, 0.5*bottom]
x2, y2 = [0,0], [0, 0.5*bottom]
plt.plot(x1, y1, x2, y2, linewidth=2.5, solid_capstyle='round', color='#0066ff', alpha=1)

##circle for clockface
circle = pl.Circle((0, 0), 0.65*bottom, transform=ax.transData._b, linewidth=3, fill=False, color="#0066ff", alpha=1)
ax.add_artist(circle)
Run Code Online (Sandbox Code Playgroud)

你知道如何在时钟内写数字吗?