В matplotlib, если один тиковый ярлык слишком длинный, как ограничить длину и показать ее в нескольких строках? - PullRequest
2 голосов
/ 04 апреля 2019

Я бы хотел сделать несколько графиков с помощью matplotlib, но есть проблема в том, что некоторые из моих ярлыков тиков слишком длинные.Интересно, смогу ли я сделать так, чтобы метки длинных тиков отображались в несколько строк?

Вот какой-то код:

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

Итак, вот сюжет, который я получил.result
Как видите, нижняя метка ytick слишком длинная, и я хочу установить в каждой строке не более 10 букв, поэтому я надеюсь, что метка тика может быть показана в

qwertyuiop
lkjhgfdsa+
1s

или несколько не так долго в одной строке.

Любая помощь будет признательна!

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

Вы можете изменить метки тиков прямо перед тем, как показывать свой график, чтобы иметь новую строку каждые max_chars символов:

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)
1 голос
/ 04 апреля 2019

Вы можете использовать модуль textwrap python. Например. обернуть в 10 символов:

import textwrap
f = lambda x: textwrap.fill(x.get_text(), 10)
ax.set_yticklabels(map(f, ax.get_yticklabels()))
0 голосов
/ 04 апреля 2019

попробуйте добавить \ n к нему

ax.barh(idx, data, zorder=2, 
            tick_label=["qwertyuiop \n lkjhgfdsa+ \n 1s",
            "abc","asd","qwerty"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...