Rotate tick labels in subplot (Pyplot, Matplotlib, gridspec)
Question:
I am attempting to rotate the x labels of a subplot (created using GridSpec) by 45 degrees. I have tried using axa.set_xticks()
and axa.set_xticklabels
, but it does not seem to work. Google wasn’t helping either, since most questions concerning labels are about normal plots, and not subplots.
See code below:
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()
Any help will be greatly appreciated!
Answers:
You can set the rotation property of the tick labels with this line:
plt.setp(axa.xaxis.get_majorticklabels(), rotation=45)
setp
is a utility function to set a property of multiple artists (all ticklabels in this case).
BTW: There is no difference between a ‘normal’ and a subplot in matplotlib. Both are just Axes objects. The only difference is the size and position and the number of them in the same figure.
You can do it in multiple ways:
Here is one solution making use of tick_params
:
ax.tick_params(labelrotation=45)
Here is another solution making use of set_xticklabels
:
ax.set_xticklabels(labels, rotation=45)
Here is a third solution making use of set_rotation
:
for tick in ax.get_xticklabels():
tick.set_rotation(45)
Just wanted to add another solution that I found on the matplotlib git discussion page:
ax[your_axis].tick_params(axis='x', rotation=90)
You can specify the axis you want by passing in the specific paramater. The advantage of this method over the accepted answer is that you can control which axis this change is applied to. Other parameters can be found here
I am attempting to rotate the x labels of a subplot (created using GridSpec) by 45 degrees. I have tried using axa.set_xticks()
and axa.set_xticklabels
, but it does not seem to work. Google wasn’t helping either, since most questions concerning labels are about normal plots, and not subplots.
See code below:
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()
Any help will be greatly appreciated!
You can set the rotation property of the tick labels with this line:
plt.setp(axa.xaxis.get_majorticklabels(), rotation=45)
setp
is a utility function to set a property of multiple artists (all ticklabels in this case).
BTW: There is no difference between a ‘normal’ and a subplot in matplotlib. Both are just Axes objects. The only difference is the size and position and the number of them in the same figure.
You can do it in multiple ways:
Here is one solution making use of tick_params
:
ax.tick_params(labelrotation=45)
Here is another solution making use of set_xticklabels
:
ax.set_xticklabels(labels, rotation=45)
Here is a third solution making use of set_rotation
:
for tick in ax.get_xticklabels():
tick.set_rotation(45)
Just wanted to add another solution that I found on the matplotlib git discussion page:
ax[your_axis].tick_params(axis='x', rotation=90)
You can specify the axis you want by passing in the specific paramater. The advantage of this method over the accepted answer is that you can control which axis this change is applied to. Other parameters can be found here