无论如何,线的颜色周期是ax._get_lines.color_cycle,补丁是ax._get_patches_for_fill.color_cycle。在matplotlib>;=1.5上,这已更改为use the ^{} library,iterable被称为prop_cycler,而不是color_cycle,并生成属性的dict,而不是仅生成颜色。
总的来说,你会做如下事情:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
color_cycle = ax._get_lines.color_cycle
# or ax._get_lines.prop_cycler on version >= 1.5
# Note that prop_cycler cycles over dicts, so you'll want next(cycle)['color']
注意:在matplotlib的最新版本中(>;=1.5)
_get_lines
已更改。现在需要在Python 2或3中使用next(ax._get_lines.prop_cycler)['color']
(或者Python 2中使用ax._get_lines.prop_cycler.next()['color']
)来从颜色循环中获取下一个颜色。尽可能使用@joe kington回答的下面部分所示的更直接的方法。由于
_get_lines
不是面向API的,因此将来可能会以不向后兼容的方式再次更改。下面是1.5中的一种工作方式,它不依赖于以下划线开头的方法,有望成为未来的证明:
这将为您提供按当前样式定义的颜色列表。
访问颜色循环迭代器
没有“面向用户”(也称为“public”)方法来访问底层迭代器,但是您可以通过“private”(按惯例)方法访问它。但是,如果不更改它,就无法获取
iterator
的状态。设置颜色周期
快速旁白:您可以通过多种方式设置颜色/属性循环(例如,
ax.set_color_cycle
在versions<;1.5或ax.set_prop_cycler
在>;=1.5中)。看看example here for version 1.5 or greater,或者previous style here。访问底层迭代器
然而,虽然没有面向公共的方法来访问iterable,但是您可以通过
_get_lines
helper类实例来访问给定axes对象(ax
)的iterable。ax._get_lines
是一个很容易混淆的名字,但它是幕后机器,允许plot
命令处理所有可以调用plot
的奇怪和多样的方式。除此之外,它还可以跟踪要自动分配的颜色。类似地,还有ax._get_patches_for_fill
来控制通过默认填充颜色和修补程序属性的循环。无论如何,线的颜色周期是} library ,iterable被称为
ax._get_lines.color_cycle
,补丁是ax._get_patches_for_fill.color_cycle
。在matplotlib>;=1.5上,这已更改为use the ^{prop_cycler
,而不是color_cycle
,并生成属性的dict
,而不是仅生成颜色。总的来说,你会做如下事情:
无法查看
的状态iterator
然而,这个对象是一个“裸的”之后的下一个颜色将被绘制出来。根据设计,如果不更改迭代器的当前状态,就无法获取它。
iterator
。我们可以很容易地得到下一个项目(例如next_color = next(color_cycle)
),但这意味着在这个在
v1.5
或更高版本中,最好获得使用的cycler
对象,因为我们可以推断其当前状态。但是,cycler
对象本身在任何地方都不可访问(公开或私下)。相反,只有从cycler
对象创建的itertools.cycle
实例是可访问的。不管怎样,都无法到达颜色/属性循环器的基本状态。匹配先前打印项的颜色,而不是
在你的例子中,听起来你想匹配刚刚绘制的东西的颜色。不要试图确定颜色/属性是什么,而是根据打印内容的属性设置新项的颜色/等。
例如,在你所描述的情况下,我会这样做:
这并不是唯一的方法,但比手动获取绘制线的颜色更干净,在这种情况下。
相关问题 更多 >
编程相关推荐