如何在 matplotlib 极坐标图中旋转 theta 刻度标签?

TM5*_*TM5 2 python matplotlib

在 matplotlib 极坐标图中,我想将每个单独的 theta 刻度标签旋转不同的角度。但是,我在文档中找不到任何内容可以做到这一点。这是一个简单的图来说明:

from matplotlib import pyplot as plt
import numpy as np

fig = plt.figure()
ax = plt.axes(polar=True)
ax.set_thetalim(0., np.pi/4.)
ax.set_rlim(0., 2.)

# set the size of theta ticklabels (works)
thetatick_locs = np.linspace(0.,45.,4)
thetatick_labels = [u'%i\u00b0'%np.round(x) for x in thetatick_locs]
ax.set_thetagrids(thetatick_locs, thetatick_labels, fontsize=16)
Run Code Online (Sandbox Code Playgroud)

这会在 0、15、30 和 45 度处添加标签。我想做的是将 15 度标签旋转 15 度,将 30 度标签旋转 30 度,依此类推,使每个标签的文本方向径向向外。由于get_xticklabels在一个PolarAxes实例中似乎获得了 theta 刻度标签,我尝试了:

for i,t in enumerate(ax.get_xticklabels()):
    t.set_rotation(thetatick_locs[i])
Run Code Online (Sandbox Code Playgroud)

然而,这没有任何作用。还有其他方法可以做我想做的事吗?总的来说,我发现极轴的文档不如矩形轴的文档那么全面,可能是因为使用它的人较少。所以也许已经有一种方法可以做到这一点。

She*_*ore 5

您当前的方法适用于笛卡尔坐标,但对于极坐标,您可以使用此处前面介绍的解决方法。我在下面为您改编了这个答案。设置theta网格后可以添加以下代码

fig.canvas.draw()

labels = []

for label, angle in zip(ax.get_xticklabels(), thetatick_locs):
    x,y = label.get_position()
    lab = ax.text(x,y, label.get_text(), transform=label.get_transform(),
                  ha=label.get_ha(), va=label.get_va())
    lab.set_rotation(angle)
    labels.append(lab)

ax.set_xticklabels([])

plt.show()    
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述