Matplotlib make tick labels font size smaller

PythonMatplotlib

Python Problem Overview


In a matplotlib figure, how can I make the font size for the tick labels using ax1.set_xticklabels() smaller?

Further, how can one rotate it from horizontal to vertical?

Python Solutions


Solution 1 - Python

There is a simpler way actually. I just found:

import matplotlib.pyplot as plt
# We prepare the plot  
fig, ax = plt.subplots()

# We change the fontsize of minor ticks label 
ax.tick_params(axis='both', which='major', labelsize=10)
ax.tick_params(axis='both', which='minor', labelsize=8)

This only answers to the size of label part of your question though.

Solution 2 - Python

To specify both font size and rotation at the same time, try this:

plt.xticks(fontsize=14, rotation=90)

Solution 3 - Python

Please note that newer versions of MPL have a shortcut for this task. An example is shown in the other answer to this question: https://stackoverflow.com/a/11386056/42346

The code below is for illustrative purposes and may not necessarily be optimized.

import matplotlib.pyplot as plt
import numpy as np

def xticklabels_example():
    fig = plt.figure() 
    
    x = np.arange(20)
    y1 = np.cos(x)
    y2 = (x**2)
    y3 = (x**3)
    yn = (y1,y2,y3)
    COLORS = ('b','g','k')
    
    for i,y in enumerate(yn):
        ax = fig.add_subplot(len(yn),1,i+1)
        
        ax.plot(x, y, ls='solid', color=COLORS[i]) 
        
        if i != len(yn) - 1:
            # all but last 
            ax.set_xticklabels( () )
        else:
            for tick in ax.xaxis.get_major_ticks():
                tick.label.set_fontsize(14) 
                # specify integer or one of preset strings, e.g.
                #tick.label.set_fontsize('x-small') 
                tick.label.set_rotation('vertical')
    
    fig.suptitle('Matplotlib xticklabels Example')
    plt.show()

if __name__ == '__main__':
    xticklabels_example()

enter image description here

Solution 4 - Python

Alternatively, you can just do:

import matplotlib as mpl
label_size = 8
mpl.rcParams['xtick.labelsize'] = label_size 

Solution 5 - Python

Another alternative

I have two plots side by side and would like to adjust tick labels separately.

The above solutions were close however they were not working out for me. I found my solution from this matplotlib page.

ax.xaxis.set_tick_params(labelsize=20)

This did the trick and was straight to the point. For my use case, it was the plot on the right that needed to be adjusted. For the plot on the left since I was creating new tick labels I was able to adjust the font in the same process as seting the labels.

ie

ax1.set_xticklabels(ax1_x, fontsize=15)
ax1.set_yticklabels(ax1_y, fontsize=15)

thus I used for the right plot,

ax2.xaxis.set_tick_params(labelsize=24)
ax2.yaxis.set_tick_params(labelsize=24)

A minor subtlety... I know... but I hope this helps someone :)

Bonus points if anyone knows how to adjust the font size of the order of magnitude label.

enter image description here

Solution 6 - Python

plt.tick_params(axis='both', which='minor', labelsize=12)

Solution 7 - Python

In current versions of Matplotlib, you can do axis.set_xticklabels(labels, fontsize='small').

Solution 8 - Python

For smaller font, I use

ax1.set_xticklabels(xticklabels, fontsize=7)

and it works!

Solution 9 - Python

You can also change label display parameters like fontsize with a line like this:

zed = [tick.label.set_fontsize(14) for tick in ax.yaxis.get_major_ticks()]

Solution 10 - Python

The following worked for me:

ax2.xaxis.set_tick_params(labelsize=7)
ax2.yaxis.set_tick_params(labelsize=7)

The advantage of the above is you do not need to provide the array of labels and works with any data on the axes.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOpen the wayView Question on Stackoverflow
Solution 1 - PythonAutiwaView Answer on Stackoverflow
Solution 2 - PythonscottlittleView Answer on Stackoverflow
Solution 3 - Pythonmechanical_meatView Answer on Stackoverflow
Solution 4 - Pythonuser2468932View Answer on Stackoverflow
Solution 5 - PythonKyle SwansonView Answer on Stackoverflow
Solution 6 - PythonjingweimoView Answer on Stackoverflow
Solution 7 - PythonChristophView Answer on Stackoverflow
Solution 8 - PythonPengyaoView Answer on Stackoverflow
Solution 9 - PythonATX_BigfootView Answer on Stackoverflow
Solution 10 - PythonCryptomanView Answer on Stackoverflow