2010-06-10 11 views
11

Mam serię linii, które należy narysować z osobnym kolorem. Każda linia składa się w rzeczywistości z kilku zestawów danych (dodatnich, negatywnych regionów itp.), Dlatego chciałbym móc stworzyć generator, który będzie zasilał jeden kolor na raz w całym spektrum, na przykład gist_rainbow mapa shown here.Utwórz generator kolorów z podanej mapy kolorów w matplotlib

Znalazłem następujące prace, ale wydaje się bardzo skomplikowane, a co ważniejsze, trudne do zapamiętania,

from pylab import * 

NUM_COLORS = 22 

mp = cm.datad['gist_rainbow'] 
get_color = matplotlib.colors.LinearSegmentedColormap.from_list(mp, colors=['r', 'b'], N=NUM_COLORS) 
... 
# Then in a for loop 
    this_color = get_color(float(i)/NUM_COLORS) 

Ponadto nie obejmuje zakres kolorów w mapie gist_rainbow mam przedefiniować mapę .

Może generator nie jest najlepszym sposobem, aby to zrobić, jeśli tak, to w jaki sposób jest akceptowany?

Odpowiedz

18

Aby kolorach indeks z konkretnym colormap można użyć:

import pylab 
NUM_COLORS = 22 

cm = pylab.get_cmap('gist_rainbow') 
for i in range(NUM_COLORS): 
    color = cm(1.*i/NUM_COLORS) # color will now be an RGBA tuple 

# or if you really want a generator: 
cgen = (cm(1.*i/NUM_COLORS) for i in range(NUM_COLORS)) 
+0

: Witam, chciałem zapytać, jak mogę to wykorzystać w moich program.I mieć na przykład komórki, które mają wartości całkowite (pusty = 0, full = 1 ..) .Jak mogę sprawić, że "pusty" odpowiada kolorowi "red", full to color white itp. Mam funkcję, w której robię wykres ".... im = plt.imshow (mydata, cmap = plt.get_cmap ('gist_earth')) ".Jak muszę wdrożyć powyższe? (jeśli powiemy to samo). Dzięki! – George

+0

@George: Jak to opisujesz, nie jestem pewien, dlaczego to nie działa. Może opublikuj pełne pytanie z małym przykładem. – tom10

+0

: Jeśli możesz sprawdzić tutaj http://stackoverflow.com/questions/8929456/how-to-create-a-movie-in-relation-to-matlab (w zaktualizowanej części), gdzie utworzę wykres.Jak można mogę zaimplementować twój przykład? (Jeśli nalegasz, opublikuję nową odpowiedź) Dzięki! – George

Powiązane problemy