Как вырезать длинные этикетки в Matplotlib - PullRequest
2 голосов
/ 28 мая 2019

Я хотел бы вырезать длинные метки, чтобы отображались только первые 4 буквы без изменения значений в исходном фрейме данных.

Пример:

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');

Токовый выход : enter image description here

Желаемый результат:

enter image description here

Ответы [ 3 ]

2 голосов
/ 28 мая 2019

Я приведу несколько общее решение: перебирайте метки y-tick, а затем создайте список новых меток, в котором будет храниться только до 4 символов, если любая метка содержит более 4 символов.Наконец, назначьте этот новый список меток как y-ticks

# 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)  

. Или вы можете создать новые метки в одной строке, используя понимание списка как

new_labels = [i.get_text()[0:4] if len(i.get_text()) > 4 else i.get_text() 
              for i in ax.yaxis.get_ticklabels()]

enter image description here

2 голосов
/ 28 мая 2019

Это лучше всего решить путем предоставления данных в краткой форме.

df2 = d.copy()
df2["var"] = df2["var"].apply(lambda x: x[:4])

# Plot
f, axes = plt.subplots()
sns.countplot(y='var', data=df2, orient='h');

enter image description here

0 голосов
/ 28 мая 2019

попробуйте это:

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');

, чтобы получить 4 первые буквы строки:

first_four_letters = your_string[:4]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...