17

I'm new to matplotlib and trying to find out how can I change formatting only selected x tick labels. For simplicity, I attached below simple code and chart. How can I change font color of only last x tick label(5.0 in this example)?

Code
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4, 5], [50, 40, 60, 70, 50])
plt.show()

enter image description here

Elgin Cahangirov
  • 1,932
  • 4
  • 24
  • 45

1 Answers1

22

You can obtain the xticklabels via ax.get_xticklabels(). This returns a list of matplotlib.text.Text instances. You can then select one of them and use text.set_color("red") to colorize it.

ax.get_xticklabels()[-2].set_color("red")

enter image description here

The problem is that it's not intuitively clear which of the elements would be the one we are looking for. In this case it's the second last, since there is an empty ticklabel at the very end of the list. This may require to test a bit, or print them out before setting them. Also, if the plot is resized, such that more ticklabels appear on the axis, the formatted label might suddenly carry a different number than before. Such cases would require a bit more work to account for.


Of course, appart from the color you can change every attribute of the text instance you like,
ax.get_xticklabels()[-2].set_color("white")
ax.get_xticklabels()[-2].set_fontsize(14)
ax.get_xticklabels()[-2].set_weight("bold")
ax.get_xticklabels()[-2].set_bbox(dict(facecolor="red", alpha=0.9))

enter image description here

ImportanceOfBeingErnest
  • 321,279
  • 53
  • 665
  • 712