修改Python Matplotlib绘图的配色方案

5
我想为我的Python图设置一个颜色方案,使得它们不像下面显示的顶部图中A和H那样重复使用相同的颜色。(如果难以看清,请见谅)。我正在使用的代码简单如下:

ax1.plot(sections,A,label='A',linewidth=2) ax1.plot(sections,B,label='B',linewidth=2) ax1.plot(sections,C,label='C',linewidth=2) ax1.plot(sections,D,label='D',linewidth=2) ax1.plot(sections,E,label='E',linewidth=2) ax1.plot(sections,F,label='F',linewidth=2) ax1.plot(sections,G,label='G',linewidth=2) ax1.plot(sections,H,label='H',linewidth=2)

有没有最佳方法来设置颜色方案?是否可以使用colormap函数?感谢您的任何帮助!
2个回答

4
您可以使用一些色图来为您的线条上色,例如(这里我使用“jet”色图):
>>> from matplotlib import cm
>>> for i, val in enumerate(cm.jet(linspace(0,1,10))): #different lines
    plt.plot(arange(10), arange(10)+i, color=val, linestyle='-')

enter image description here

如果您想在现有的代码中进行最小化更改,请添加以下内容(并不要忘记将10更改为您拥有的图形数量):

for L, C in zip([item for item in ax.get_children() if isinstance(item, matplotlib.lines.Line2D)], cm.jet(linspace(0,1,10))):
    L.set_color(C)   

谢谢您的帮助,但我仍然不太明白如何在我编写的脚本中使用它。我能不能简单地说一些类似于ax1.cm.ScalarMappable(cmap='jet')的话? - user2739143
我在你的代码中遇到了一个错误,提示“NameError: name 'matplotlib' is not defined”。我之前已经使用“import matplotlib.pyplot as plt”定义了matplotlib,而且“from matplotlib import *”也被引入了,这里有什么问题吗? - user2739143
是的,当然要添加 import matplotlib。但是由于你已经有了 from matplotlib import *,所以你只需要使用 lines.Line2D 而不是 matplotlib.lines.Line2D - CT Zhu
谢谢你的帮助,现在它已经可以工作了!干杯! - user2739143
cm.jet(x)返回的值代表什么(其中x是任意数字)? - iam_agf
它返回一个RGBA颜色值列表,浮点数范围从0到1。如果x大于1,则返回比[0, 0, 0.5, 1]更蓝的颜色;如果x小于0,则返回比[0.5, 0, 0, 1]更红的颜色。不太容易看出来,这就是为什么你想要提供一个在0和1之间的x的原因。 - CT Zhu

2
您可以使用set_color_cycle()方法为特定轴更改颜色映射。
这是matplotlib文档中颜色循环演示的简化版本。
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi)
offsets = np.linspace(0, 2*np.pi, 4, endpoint=False)
yy = np.transpose([np.sin(x + phi) for phi in offsets])

plt.rc('lines', linewidth=4)

ax = plt.gca()

# Set color cycle for this axes 
ax.set_color_cycle(['c', 'm', 'y', 'k'])

ax.plot(yy)

plt.show()

CMYK example

另一种选择是更改全局的默认颜色映射。可以通过创建一个matplotlibrc文件并在其中设置axes.color_cyle,或者在运行时更改运行配置来实现。
import matplotlib
matplotlib.rcParams['axes.color_cycle'] = ['r', 'g', 'b']

您也可以使用HTML十六进制表示法来指定颜色:
ax.set_color_cycle(['#FF0000', '#00FF00', '#0000FF'])

有关如何指定颜色的更多信息,请参见“颜色”模块的文档matplotlib.cm模块也很有用,例如可以用于注册自己的颜色映射。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接