簡體   English   中英

相當於列表理解的地圖不起作用

[英]map equivalent of a list comprehension not working

我想旋轉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的代碼可以編譯,但是不會旋轉刻度標簽。

注意代碼行

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

在python 2中可以很好地工作。這是因為在python 2中, map生成了一個列表,可以有效地評估每個元素的映射功能。

在Python 3, map創建的實例map ,它本質上是一個迭代器,它不打通,除非它需要重復。

因此,針對python 3的解決方案可能是從map創建list

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

更慣用的方式可能是遍歷ticklabel,

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

考慮到通常如何在matplotlib中旋轉ticklabel,但是寧願這樣做

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

要么

 ax.tick_params(axis="x", rotation=45)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM