可以查询matplotlib颜色周期的当前状态吗?换句话说,有没有一个函数get_cycle_state
的行为方式如下?
>>> plot(x1, y1)
>>> plot(x2, y2)
>>> state = get_cycle_state()
>>> print state
2
其中我期望状态是将在绘图中使用的下一种颜色的索引。或者,如果它返回下一个颜色(在上面的示例中,默认循环为“r”),也可以。
发布于 2016-07-23 14:47:35
这里有一种在1.5中工作的方法,希望它能适应未来,因为它不依赖于带有下划线的方法:
colors = plt.rcParams["axes.prop_cycle"].by_key()["color"]
这将为您提供一个为当前样式定义的颜色列表。
发布于 2015-11-09 19:56:30
注意:在matplotlib (>= 1.5)的最新版本中,_get_lines
发生了变化。现在需要使用Python2或3中的next(ax._get_lines.prop_cycler)['color']
(或Python 2中的ax._get_lines.prop_cycler.next()['color']
)从颜色循环中获取下一种颜色。
只要有可能,请使用@joe-kington答案下半部分所示的更直接的方法。由于_get_lines
不是面向应用程序接口的,因此将来可能会以不向后兼容的方式再次更改。
发布于 2012-12-12 10:20:39
当然,这样就可以了。
#rainbow
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,2*np.pi)
ax= plt.subplot(1,1,1)
ax.plot(np.sin(x))
ax.plot(np.cos(x))
rainbow = ax._get_lines.color_cycle
print rainbow
for i, color in enumerate(rainbow):
if i<10:
print color,
提供:
<itertools.cycle object at 0x034CB288>
r c m y k b g r c m
下面是matplotlib使用itertools.cycle的itertools函数
编辑:谢谢你的评论,似乎不可能复制迭代器。一个想法是转储一个完整的周期,并跟踪您正在使用的值,让我回到这一点上来。
Edit2:好吧,这将给你下一个颜色,并生成一个新的迭代器,它的行为就像没有调用next一样。这不会保持颜色的顺序,只保留下一个颜色值,我把它留给你。
这给出了下面的输出,注意图中的陡度对应于索引,例如第一个g是最底层的图形,依此类推。
#rainbow
import matplotlib.pyplot as plt
import numpy as np
import collections
import itertools
x = np.linspace(0,2*np.pi)
ax= plt.subplot(1,1,1)
def create_rainbow():
rainbow = [ax._get_lines.color_cycle.next()]
while True:
nextval = ax._get_lines.color_cycle.next()
if nextval not in rainbow:
rainbow.append(nextval)
else:
return rainbow
def next_color(axis_handle=ax):
rainbow = create_rainbow()
double_rainbow = collections.deque(rainbow)
nextval = ax._get_lines.color_cycle.next()
double_rainbow.rotate(-1)
return nextval, itertools.cycle(double_rainbow)
for i in range(1,10):
nextval, ax._get_lines.color_cycle = next_color(ax)
print "Next color is: ", nextval
ax.plot(i*(x))
plt.savefig("SO_rotate_color.png")
plt.show()
控制台
Next color is: g
Next color is: c
Next color is: y
Next color is: b
Next color is: r
Next color is: m
Next color is: k
Next color is: g
Next color is: c
https://stackoverflow.com/questions/13831549
复制相似问题