Карта, эквивалентная пониманию списка, не работает - PullRequest
0 голосов
/ 26 августа 2018

Я бы хотел повернуть метки в matplotlib.Понимание списка работает отлично:

[tick.set_rotation(45) for tick in ax.get_xticklabels()]

Однако эквивалентный код, использующий map, не работает:

map(lambda tick: tick.set_rotation(45), ax.get_xticklabels())

Ни:

map(operator.methodcaller('set_rotation', 45), ax.get_xticklabels())

Что яздесь не хватает?Я должен отметить, что код, использующий map, компилирует OK, но он не вращает метки.

1 Ответ

0 голосов
/ 26 августа 2018

Обратите внимание, что строка кода

map(lambda tick: tick.set_rotation(45), ax.get_xticklabels())

прекрасно работает в python 2. Это потому, что в python 2 map создает список, эффективно оценивая функцию отображения для каждого элемента.

В Python 3 map создает экземпляр map, который, по сути, является итератором, который не проходит итерацию, если в этом нет необходимости.

Таким образом, решение для Python 3 может бытьдля создания list из map,

list(map(lambda tick: tick.set_rotation(45), ax.get_xticklabels()))

Более идиотским способом, вероятно, было бы скорее циклически помечать метки,

for tick in ax.get_xticklabels():
    tick.set_rotation(45)

Принимая во внимание, как вы 'Как правило, d поворачивает метки в matplotlib, однако это будет

 plt.setp(ax.get_xticklabels(), rotation=45)

или

 ax.tick_params(axis="x", rotation=45)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...