Search code examples
pythonmatplotlibbar-chartx-axis

Diagonal tick labels


I am plotting a bar chart in python using matplotlib.pyplot. The chart will contain a large number of bars, and each bar has its own label. Thus, the labels overlap, and they are no more readable. I would like that the label are displayed diagonally so that they do not overlab, such as in this image.

This is my code:

import matplotlib.pyplot as plt
N =100
menMeans = range(N)
ind = range(N)  
ticks = ind 
fig = plt.figure()
ax = fig.add_subplot(111)
rects1 = ax.bar(ind, menMeans, align = 'center')
ax.set_xticks(ind)
ax.set_xticklabels( range(N) )
plt.show()

How can the labels be displayed diagonally?


Solution

  • The example in the documents uses:

    plt.setp(xtickNames, rotation=45, fontsize=8)
    

    so in your case I would think: ax.set_ticklabels(range(N), rotation=45, fontsize=8) would give you the angle but they still overlap. So try:

    import matplotlib.pyplot as plt
    N =100
    menMeans = range(N)
    ind = range(N)  
    ticks = ind 
    fig = plt.figure()
    ax = fig.add_subplot(111)
    rects1 = ax.bar(ind, menMeans, align = 'center')
    ax.set_xticks(range(0,N,10))
    ax.set_xticklabels( range(0,N,10), rotation=45 )
    plt.show()
    

    enter image description here