繁体   English   中英

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

[英]How to rotate theta ticklabels in a matplotlib polar plot?

在 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)

这会在 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])

然而,这没有任何作用。 有没有其他方法可以做我想做的事? 总的来说,我发现极坐标轴的文档不像矩形轴那样详尽,可能是因为使用它的人较少。 所以也许已经有办法做到这一点。

您当前的方法适用于笛卡尔坐标,但适用于极坐标,您可以使用前面介绍的解决方法here 我在下面为你改编了这个答案。 您可以在设置 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()    

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM