python - 等效于列表理解的映射不起作用
问题描述
我想在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 的解决方案可能是list
从map
,
list(map(lambda tick: tick.set_rotation(45), ax.get_xticklabels()))
更惯用的方法可能是循环遍历刻度标签,
for tick in ax.get_xticklabels():
tick.set_rotation(45)
考虑到您通常如何在 matplotlib 中旋转刻度标签,但它宁愿是
plt.setp(ax.get_xticklabels(), rotation=45)
或者
ax.tick_params(axis="x", rotation=45)
推荐阅读
- android - 从 RxTextView.textChanges 减缓 observable 的发射
- sas - SAS University Edition 中未解析的表观符号引用
- python - 在 django 中将数据从一个视图传递到另一个视图的正确方法?
- javascript - 如何使用 JQuery 触发 Bootstrap 3 数据切换?
- java - 线程执行输出
- matlab - 仅在由行索引向量指定的行中替换对角线元素?(MATLAB)
- javascript - 如何从字符串做数组?
- android - Android Studio Gradle 不工作
- python - 在 Python 3.6 中实例化自定义类后内部类对象未重置
- java - 助记符适用于 MenuBar 但不适用于 MenuItems