J'aimerais faire quelques graphiques avec matplotlib, mais il y a un problème parce que certaines de mes étiquettes de graduation sont trop longues. Je me demande si je peux faire apparaître de longues étiquettes de graduation sur plusieurs lignes.
Voici du code:
qwertyuiop lkjhgfdsa+ 1s
Voici donc l'intrigue que j'ai obtenue.
Comme vous pouvez le voir, le libellé ytick du bas est trop long, et je veux définir chaque ligne sur 10 lettres au maximum, donc j'espère que le libellé de coche pourra être affiché dans
import numpy as np import matplotlib.pyplot as plt data = np.random.random(4) idx = np.arange(4) fig = plt.figure() ax = fig.add_subplot(111) ax.set_ylim(-0.5, 4-0.5) ax.set_yticks(b) ax.tick_params(length=0) ax.barh(idx, data, zorder=2, tick_label=["qwertyuioplkjhgfdsa+1s", "abc","asd","qwerty"]) ax.grid(axis='x') plt.show()
ou un peu moins longtemps en une seule ligne.
Toute aide serait appréciée!
3 Réponses :
essayez d'y ajouter \ n
ax.barh(idx, data, zorder=2, tick_label=["qwertyuiop \n lkjhgfdsa+ \n 1s", "abc","asd","qwerty"])
En fait, j'obtiens les étiquettes de graduation ailleurs, donc la solution de gmds fonctionne pour moi. Mais encore merci pour votre aide!
Vous pouvez modifier les étiquettes de graduation juste avant d'afficher votre tracé pour avoir une nouvelle ligne tous les max_chars
caractères:
max_chars = 10 new_labels = ['\n'.join(label._text[i:i + max_chars ] for i in range(0, len(label._text), max_chars )) for label in ax.get_yticklabels()] ax.set_yticklabels(new_labels)
Vous pouvez utiliser le module textwrap
de python. Par exemple. pour envelopper à 10 caractères:
import textwrap f = lambda x: textwrap.fill(x.get_text(), 10) ax.set_yticklabels(map(f, ax.get_yticklabels()))