gpt4 book ai didi

python - 获取 matplotlib 颜色循环状态

转载 作者:IT老高 更新时间:2023-10-28 21:11:36 28 4
gpt4 key购买 nike

是否可以查询matplotlib颜色循环的当前状态?换句话说,是否有一个函数 get_cycle_state 会以下列方式运行?

>>> plot(x1, y1)
>>> plot(x2, y2)
>>> state = get_cycle_state()
>>> print state
2

我希望状态是绘图中使用的下一种颜色的索引。或者,如果它返回下一个颜色(上例中默认循环的“r”),那也可以。

最佳答案

访问颜色循环迭代器

没有“面向用户”(也称为“公共(public)”)方法来访问底层迭代器,但您可以通过“私有(private)”(按照惯例)方法访问它。但是,如果不更改它,您将无法获得 iterator 的状态。

设置颜色循环

快速搁置:您可以通过多种方式设置颜色/属性循环(例如 <1.5 版本中的 ax.set_color_cycle 或 >=1.5 中的 ax.set_prop_cycler )。看看example here for version 1.5 or greater ,或 previous style here .

访问底层迭代器

但是,虽然没有面向公众的方法来访问可迭代对象,但您可以通过 _get_lines 帮助程序类实例为给定的坐标区对象 (ax) 访问它。 ax._get_lines 的名字有点令人困惑,但它是允许 plot 命令处理 plot 可以调用。除此之外,它还可以跟踪自动分配的颜色。同样,还有 ax._get_patches_for_fill 来控制循环通过默认填充颜色和补丁属性。

无论如何,颜色循环迭代是 ax._get_lines.color_cycle 对于线和 ax._get_patches_for_fill.color_cycle 对于补丁。在 matplotlib >=1.5 上,这已更改为 use the cycler 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']

您无法查看 iterator

的状态

然而,这个对象是一个“裸露的”iterator。我们可以很容易地获得下一个项目(例如 next_color = next(color_cycle),但这意味着 之后的下一个颜色将被绘制。根据设计,没有在不更改迭代器的情况下获取当前状态的方法。

v1.5 或更高版本中,最好获取使用的 cycler 对象,因为我们可以推断其当前状态。但是,cycler 对象本身在任何地方都无法访问(公开或私下)。相反,只有从 cycler 对象创建的 itertools.cycle 实例是可访问的。无论哪种方式,都无法进入颜色/属性循环器的底层状态。

改为匹配之前绘制项目的颜色

在你的情况下,听起来你想要匹配刚刚绘制的东西的颜色。与其尝试确定颜色/属性是什么,不如根据绘制的属性设置新项目的颜色/等。

例如,在您描述的情况下,我会这样做:

import matplotlib.pyplot as plt
import numpy as np

def custom_plot(x, y, **kwargs):
ax = kwargs.pop('ax', plt.gca())
base_line, = ax.plot(x, y, **kwargs)
ax.fill_between(x, 0.9*y, 1.1*y, facecolor=base_line.get_color(), alpha=0.5)

x = np.linspace(0, 1, 10)
custom_plot(x, x)
custom_plot(x, 2*x)
custom_plot(x, -x, color='yellow', lw=3)

plt.show()

enter image description here

这不是唯一的方法,但在这种情况下,它比尝试事先获取绘制线的颜色更干净。

关于python - 获取 matplotlib 颜色循环状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13831549/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com