如何避免matplotlib.pyplot中的线条颜色重复?

时间:2011-05-17 07:36:36

标签: python colors matplotlib plot

我正在使用matplotlib.pyplot比较一些算法结果,但由于几行具有相同的确切颜色,因此很难理解发生了什么。有办法避免这种情况吗?我不认为pyplot只有七种颜色,是吗?

5 个答案:

答案 0 :(得分:7)

如果您知道要绘制多少个绘图,最好的事情是在之前定义色彩映射:

import matplotlib.pyplot as plt
import numpy as np

fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
number_of_plots=10
colormap = plt.cm.nipy_spectral #I suggest to use nipy_spectral, Set1,Paired
ax1.set_color_cycle([colormap(i) for i in np.linspace(0, 1,number_of_plots)])
for i in range(1,number_of_plots+1):
    ax1.plot(np.array([1,5])*i,label=i)

ax1.legend(loc=2)  

使用nipy_spectral

enter image description here

使用Set1 enter image description here

答案 1 :(得分:6)

Matplotlib有七种以上的颜色。您可以通过多种方式指定颜色(请参阅http://matplotlib.sourceforge.net/api/colors_api.html)。

例如,您可以使用html十六进制字符串指定颜色:

pyplot.plot(x, y, color='#112233')

答案 2 :(得分:2)

我还建议使用Seaborn。使用此库,可以非常轻松地生成具有所需颜色数量的顺序或定性调色板。还有一种可视化调色板的工具。例如:

import seaborn as sns

colors = sns.color_palette("hls", 4)
sns.palplot(colors)
plt.savefig("pal1.png")
colors = sns.color_palette("hls", 8)
sns.palplot(colors)
plt.savefig("pal2.png")
colors = sns.color_palette("Set2", 8)
sns.palplot(colors)
plt.savefig("pal3.png")

这些是生成的调色板:

enter image description here

enter image description here

enter image description here

答案 3 :(得分:0)

对于 Python 3 ,您可以使用上述解决方案:

colormap = plt.cm.nipy_spectral
colors = [colormap(i) for i in np.linspace(0, 1,number_of_plots)]
ax.set_prop_cycle('color', colors)

或:

import seaborn as sns

    colors = sns.color_palette("hls", number_of_plots)
    ax.set_prop_cycle('color', colors)

答案 4 :(得分:0)

我对Seaborn的解决方案非常简单。如果您使用Pandas进行绘制,这是一个简单的列绘制示例。

import pandas as pd
import seaborn as sns

df = pd.read_csv('file.csv')

ax = df.plot(x, y)
sns.set_palette(sns.color_palette('hls', 12))

真的很容易实现,Seaborn.

提供了许多不同的配色方案