2011-09-22 21 views
19

Ho un sacco di grafici che voglio tracciare in un grafico. Ho appena iniziato con matplotlib e non riesco a trovare un buon modo per generare un sacco di colori distinguibili :(Forse ciclismo su HSV con SV al massimo?matplotlib grande set di colori per grafici

Sto pensando a qualcosa di simile

args=[] 
for i,(x,y) in enumerate(data): 
    args.extend([x,y,hsv(i)]) 
plot(*args) 
?

Eventuali suggerimenti :)

risposta

26

penso che tu abbia l'idea giusta, salvo che i colori saranno più distinguibili se si passa la mappa colori hsv numeri che sono sparsi su tutta la gamma (0,1):

hsv = plt.get_cmap('hsv') 
hsv(float(i)/(len(data)-1)) 

o, usando NumPy:

colors = hsv(np.linspace(0, 1.0, len(kinds))) 

Ad esempio:

import datetime as DT 
import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 
import scipy.interpolate as interpolate 

dates = [DT.date(year, 9, 1) for year in range(2003, 2009)] 
t = list(map(mdates.date2num, dates)) 
jec = (100, 70, 125, 150, 300, 250) 
plt.plot(dates, jec, 'k.', markersize = 20) 
new_t = np.linspace(min(t), max(t), 80) 
new_dates = map(mdates.num2date, new_t) 
kinds = ('cubic', 'quadratic', 'slinear', 'nearest', 'linear', 'zero', 4, 5) 
cmap = plt.get_cmap('jet') 
colors = cmap(np.linspace(0, 1.0, len(kinds))) 
for kind, color in zip(kinds, colors): 
    new_jec = interpolate.interp1d(t, jec, kind=kind)(new_t) 
    plt.plot(new_t, new_jec, '-', label=str(kind), color=color) 
plt.legend(loc = 'best') 
plt.show() 

enter image description here

+0

OK, vedo. Grazie :) Comunque sembra che il mio matplotlib conosca cm.jet (e il documento non lo menziona più). Dove posso trovarlo ora? – Gerenuk

+0

Oh, ho pensato che funzioni con matplotlib.pyplot.jet() – Gerenuk

+0

Puoi anche usare 'plt.get_cmap ('jet')'. Ho modificato il post per mostrare anche questo. – unutbu

Problemi correlati