2014-03-27 104 views
0

我是新来的Python和其他节目,我尝试使用超过集合成员的循环,每一个有一个专门的数字1-21绘制的集合预报的21名成员。当我绘制地图时,所有成员都呈现蓝色。我已经对颜色映射做了一些研究,发现默认贴图没有编入索引,即我不能像调用列表或数组那样调用colormap [1]。有没有索引的色彩映射,或者有没有解决这个问题的方法?简而言之,我想循环使用简单的数字来预测每个预测成员的颜色。Python的Matplotlib /底图颜色循环

回答

2

您可以使用ax.set_prop_cycle来指定循环的颜色列表。

色彩映射表是可调用,所以一个简单的方法,以产生色彩是0和1之间通过浮标的序列与颜色表,然后将返回的RGBA颜色数组。

例如,

In [93]: jet = plt.cm.jet 

In [94]: jet([0,0.5,1]) 
Out[94]: 
array([[ 0.  , 0.  , 0.5  , 1.  ], 
     [ 0.49019608, 1.  , 0.47754586, 1.  ], 
     [ 0.5  , 0.  , 0.  , 1.  ]]) 

import matplotlib.pylab as plt 
import matplotlib.rcsetup as rcsetup 
import numpy as np 

jet = plt.cm.jet 
fig, ax = plt.subplots() 
N = 20 
idx = np.linspace(0, 1, N) 
ax.set_prop_cycle(rcsetup.cycler('color', jet(idx))) 
x = np.linspace(0, 100, 200) 
for i in range(1, N+1): 
    ax.plot(x, np.sin(x)+i) 
ax.set_ylim(0, N+1) 
plt.show() 

enter image description here

+0

一个人怎么能得到当前颜色周期图的阵列? – Royi

+0

'ax._get_lines.prop_cycler'返回一个从当前颜色周期产生颜色的迭代器。假设颜色循环不包含重复项,您可以使用以下命令生成循环中的颜色列表:'seen = set()','colors = list(itertools.takewhile(lambda x:x not in seen and not seen.add (x),(元组(项目['颜色'])的项目在ax._get_lines.prop_cycler)))''。 – unutbu