[英]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.