添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement . We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug summary

It was supposed to rotate the xticklabes with clauses:

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)