在matplotlib极坐标图中,我想将每个单独的theta ticklabel旋转不同的角度。但是,我在文档中找不到任何可以做到这一点的东西。这是一个简单的图来说明:
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 ticklabel,我尝试:
for i,t in enumerate(ax.get_xticklabels()):
t.set_rotation(thetatick_locs[i])
但是,那什么也没做。还有其他做我想要的方式吗?通常,我发现极轴的文档不如直角轴的文档完整,可能是因为使用它的人较少。所以也许已经有一种方法可以做到这一点。
答案 0 :(得分:3)
您当前的方法适用于笛卡尔坐标,但对于极坐标,您可以使用前面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()