旋转子图中的刻度标签(Pyplot,Matplotlib,gridspec)

and*_*s-p 6 python matplotlib

我试图将子图(使用GridSpec创建)的x标签旋转45度。我尝试使用axa.set_xticks()axa.set_xticklabels,但似乎无法正常工作。谷歌也没有提供帮助,因为大多数与标签有关的问题都是关于正常绘图而不是子图。

参见下面的代码:

width = 20                                    # Width of the figure in centimeters
height = 15                                   # Height of the figure in centimeters
w = width * 0.393701                            # Conversion to inches
h = height * 0.393701                           # Conversion to inches

f1 = plt.figure(figsize=[w,h])
gs = gridspec.GridSpec(1, 7, width_ratios = [1.5, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0])

axa = plt.subplot(gs[0])
axa.plot(dts, z,'k', alpha=0.75, lw=0.25)
#axa.set_title('...')
axa.set_ylabel('TVDSS ' + '$[m]$', fontsize = '10' )
axa.set_xlabel('slowness 'r'$[\mu s/m]$', fontsize = '10')
axa.set_ylim(245, 260)
axa.set_xlim(650, 700)
axa.tick_params(labelsize=7)
axa.invert_yaxis()
axa.grid()
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

Pep*_*tch 21

只是想添加我在matplotlib git 讨论页面上找到的另一个解决方案:

ax[your_axis].tick_params(axis='x', rotation=90)

您可以通过传入具体参数来指定您想要的轴。与接受的答案相比,此方法的优点是您可以控制此更改应用于哪个轴。其他参数可以在这里找到


tom*_*sen 10

您可以通过多种方式进行操作:

这是一种利用以下解决方案tick_params

ax.tick_params(labelrotation=45)
Run Code Online (Sandbox Code Playgroud)

这是另一个使用以下解决方案的解决方案set_xticklabels

ax.set_xticklabels(labels, rotation=45)
Run Code Online (Sandbox Code Playgroud)

是第三个解决方案,它利用了set_rotation

for tick in ax.get_xticklabels():
    tick.set_rotation(45)
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下 `tick_params` 将旋转应用于绘图的两个轴,仅旋转 x 轴: `ax.tick_params('x', labelrotation=45) ` (27认同)
  • 为什么有这么多方法可以做到这一点,为什么有些方法有时有效,有些却不起作用?这就是为什么 matplotlib 让我感到沮丧。如果有更好的选择的话,用例之间缺乏一致性使得我想放弃它。 (4认同)
  • 默认情况下,这会围绕中心点旋转文本,当您有长标签时,这不太有用,所以我喜欢使用 `ax.set_xticklabels(labels,rotation=45, ha='right')` 来强制向右-对齐的文本 (4认同)

hit*_*tzg 5

您可以使用此行设置刻度标签的旋转属性:

plt.setp(axa.xaxis.get_majorticklabels(), rotation=45)
Run Code Online (Sandbox Code Playgroud)

setp 是一个实用程序函数,用于设置多个艺术家的属性(在这种情况下为所有的ticklabel)。

顺便说一句:“正常”和matplotlib中的子图之间没有区别。两者都只是轴对象。唯一的区别是同一图中的大小和位置以及它们的数量。