Je voudrais couper de longues étiquettes, de sorte que seules les 4 premières lettres soient affichées, sans changer les valeurs dans le bloc de données d'origine.
Exemple:
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sn np.random.seed(89) # Toy Dataset d = pd.DataFrame(np.random.randint(0,3, size=(100, 1)), columns=['var']) d['var'] = (np.where(d['var'] == 1,'Long loooooong loooooong text',d['var'])) # Plot f, axes = plt.subplots() sns.countplot(y='var', data=d, orient='h');
Résultat souhaitable:
3 Réponses :
essayez ceci:
first_four_letters = your_string[:4]
pour obtenir les 4 premières lettres d'une chaîne:
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns np.random.seed(89) # Toy Dataset d = pd.DataFrame(np.random.randint(0,3, size=(100, 1)), columns=['var']) d['var'] = (np.where(d['var'] == 1,'Long loooooong loooooong text'[:4],d['var'])) # Plot f, axes = plt.subplots() sns.countplot(y='var', data=d, orient='h');
Bien que cela réponde à la question, je ne vois toujours pas la raison pour laquelle d'abord mettre une grande chaîne, puis prendre les quatre premiers caractères. Cette longue chaîne n'a aucun autre but dans le code et est redondante. Alors pourquoi l'utiliser par codage en dur
Je vais fournir une solution un peu générale: parcourez vos étiquettes y-tick, puis créez une liste de nouvelles étiquettes, qui ne stocke que jusqu'à 4 caractères si une étiquette a plus de 4 caractères. Enfin, attribuez cette nouvelle liste d'étiquettes en tant que coches y
new_labels = [i.get_text()[0:4] if len(i.get_text()) > 4 else i.get_text() for i in ax.yaxis.get_ticklabels()]
Ou vous pouvez créer les nouvelles étiquettes sur une seule ligne en utilisant la compréhension de liste comme
# Plot f, axes = plt.subplots() ax = sns.countplot(y='var', data=d, orient='h'); new_labels = [] for i in ax.yaxis.get_ticklabels(): label = i.get_text() if len(label) > 4: new_labels.append(label[0:4]) else: new_labels.append(label) ax.yaxis.set_ticklabels(new_labels)
C'est exactement ce que je cherchais. Merci!