xticks = ax.get_xticks()
xticklabes = ax.get_ticklabels()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabels, rotation=90)
But it got empty xticklables as a result.
Code for reproduction
Snippet 1:
import matplotlib.pyplot as plt
import numpy as np
y = np.arange(10)
ax = plt.subplot()
ax.plot(y)
xticks = ax.get_xticks()
xticklabels = ax.get_xticklabels()
ax.set_xticks(xticks)
Snippet 2:
import matplotlib.pyplot as plt
import numpy as np
y = np.arange(10)
ax = plt.subplot()
ax.plot(y)
xticks = ax.get_xticks()
xticklabels = ax.get_xticklabels()
ax.set_xticks(xticks)
ax.set_xticklabels(xticklabes, rotation=90)
Actual outcome
As the result of Snippet 1, variable xticklabels
got correct result of current plot.
But when it came to Snippet 2, xticklabels
became empty []
. And plot show no xticklabes.
Expected outcome
outcome of snippet 1:
outcome of snippet 2:
Additional information
No response
Operating system
Windows 10
Matplotlib Version
3.5.2
Matplotlib Backend
No response
Python version
3.8.10
Jupyter version
3.0.6
Installation
The tick labels are initially empty texts and only formatted and written out at draw time, when we know the final size of the axes. You would have to insert a manual draw before getting the labels. Note however, that this approach is not well suited if you only want to change the style of the ticks.
When you set the labels as above you technically change to a fixed locator and formatter (If you are not familiar with these concepts: think you have a set of fixed labels at fixed positions). The ticks labels will not adapt anymore e.g. if you zoom or pan.
What you actually want is tick_params()
import matplotlib.pyplot as plt
import numpy as np
y = np.arange(10)
ax = plt.subplot()
ax.plot(y)
ax.tick_params('x', rotation=90)