我对Matplotlib.pyplot和命名空间有疑问。 请参阅以下代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import cm
x=np.linspace(0,1,28)
color=iter(cm.gist_rainbow_r(np.linspace(0,1,28)))
plt.clf()
for s in range(28):
c=next(color)
plt.plot(x,x*s, c=c)
plt.show()
这个想法是让彩虹地图的颜色有不同的颜色。 现在发生的事情是,在第一次执行时它起作用,但事情变得越来越奇怪。 在几次连续执行中,地图停止使用,而不是使用默认地图。
我看到问题可能在于剧情功能中的“c = c”,但我玩过不同的命名“c”,“color”,....并且找不到系统的问题在这里。
有人可以重现问题并且(连续尝试至少5次左右的代码)能够解释,这里发生了什么?
由于
答案 0 :(得分:1)
这是mpl + python3.4 +的已知问题,已在mpl v1.5 +中修复。
许多样式参数都有多个别名(ex 'c'
vs 'color'
),其中mpl没有正确合并,艺术家基本上被告知两种不同颜色,内部意味着有两个字典其中'c'
和'color'
。
在python 3.4+中,字典迭代的进程到进程顺序是随机的,因为底层哈希表的种子是随机的(这是为了防止基于故意哈希表冲突的可能的DOS攻击)。在旧版本的python中,用户提供的颜色总是在迭代顺序的后期出现,所以事情巧合了。
简单的解决方法(iirc)是使用plot(x, y, color=c)
或更新到mpl 1.5.1。