如何使用matplotlib的set_cmap()?

时间:2014-12-04 16:54:35

标签: python matplotlib

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-np.pi,np.pi,101)
y=np.sin(x)+np.sin(3*x)/3
y1=np.sin(x)+np.sin(2*x)/3
y2=np.sin(x)+np.sin(3*x)/2

plt.set_cmap('hot')

plt.plot(x,y)
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

我想在我的情节中尝试不同的色彩映射,但命令plt.set_cmap('hot')不起作用,即颜色与标准调色板中的颜色相同(http://i.stack.imgur.com/FjXoO.png

我在Debian Linux下使用WXAgg后端,在Enthought的Canopy中使用matplotlib。我尝试了Qt4Agg后端,结果是一样的。如何正确改变颜色?

1 个答案:

答案 0 :(得分:6)

plt.set_cmap会设置一个colormap,例如,在图片中使用。由于您只是绘制线条,因此不会影响您的情节。

使用plt.plot绘图时,您可以提供color关键字参数,该参数将选择线条的颜色,如下所示。

# ... 
plt.plot(x,y, color='black')
plt.plot(x,y1, color='pink')
plt.plot(x,y2, color='green')
plt.show()

或者,您可以使用ax.set_color_cycle()设置新的颜色循环,这样您就可以选择在添加新绘图时颜色的变化,并有效地创建与之前相同的图形。有关演示,请参阅here

# ...    
plt.gca().set_color_cycle(['black', 'pink', 'green'])

plt.plot(x,y)
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

最后,如果您想从现有的色彩映射中获取颜色列表,那么您可以使用以下代码将它们线性间隔开。色图本身由matplotlib.pyplot.cm.<your_colormap_here>给出。通过在0和1之间传递10个等间距的数字作为参数,您可以得到10个等间距的颜色。

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-np.pi,np.pi,101)
y=np.sin(x)+np.sin(3*x)/3
y1=np.sin(x)+np.sin(2*x)/3
y2=np.sin(x)+np.sin(3*x)/2

colors = plt.cm.hot(np.linspace(0,1,10))
plt.gca().set_color_cycle(colors)

plt.plot(x,y)
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()

Example plot