极坐标图中的Theta网格标签

3

我正在尝试使用以下脚本绘制极坐标图。我希望thetagrid标签的角度与网格线对齐。(如图所示)

根据Tom的回答,我已经修改了代码。图的左半部分的标签似乎是倒置的。

from pylab import *
fig = figure()
rc('grid', color='r', linewidth=0.5, linestyle='-')
data1 = loadtxt("1.dat")
ax = plt.subplot(111,polar=True)
x= data1[:,0]
y= data1[:,1]
plt.scatter(x,y, s=0.1,color='r' )
gl, gt = ax.set_rgrids(range(10,81,10))
for l in gl: l.set_ls('') 
(lines,labels)=thetagrids( range(0,360,18), ("AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", "II", "KK", "LL","MM","NN","OO","PP","QQ","RR","SS","TT","UU","VV"))
for label,angle in zip(labels,range(0,360,18)):
    label.set_rotation(90-angle)
    ax.set_theta_offset(np.pi/2.0)
    ax.set_theta_direction(-1)
    ax.set_yticklabels([])
    show()

enter image description here


请查看我的编辑,针对您的修改后的问题进行了处理。 - tmdavison
谢谢Tom!对于else条件,270度角效果更好。 - Darshi
1个回答

0

在设置thetagrids之后,您可以设置标签的角度。您需要将其设置为90-angle。如果您保留从thetagrids返回的labels,则可以循环遍历这些标签并使用label.set_rotation

(lines,labels) = thetagrids( range(0,360,18), ("XXXXX","YYYYY","ZZZZ","PPPP"))

for label,angle in zip(labels,range(0,360,18)):
    label.set_rotation(90-angle)

enter image description here

编辑

关于您编辑后的问题。您可以添加一个条件,如果角度大于180,则使用270-angle。类似这样:

for label,angle in zip(labels,range(0,360,18)):
    if angle <= 180:
         label.set_rotation(90-angle)
    else:
         label.set_rotation(270-angle)

enter image description here

编辑2

至于你在下面评论中的问题,你可以使用thetagridsfrac参数来改变刻度标签的偏移量。从docs中可以看到:

frac是极坐标轴半径上放置标签的分数(1为边缘)。例如,1.05表示在轴外部,0.95表示在轴内部。

因此,要增加轴边缘和标签之间的填充,请使frac>1,例如:

(lines,labels)=thetagrids(range(0,360,18), 
                          ("AA", "BB", "CC", "DD", "EE", "FF", "GG", "HH", "II", "KK", "LL","MM","NN","OO","PP","QQ","RR","SS","TT","UU","VV"),
                          frac=1.2)

enter image description here


这个建议非常好用。但是,我想为标签添加填充。我尝试了tight_layout(),但没有起作用。 - Darshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接