2010-05-27 18 views
20

Chcę ustawić zakres kolorów na wielu wykresach punktowych i dodać pasek kolorów do każdego wykresu (który będzie taki sam na każdym rysunku). Zasadniczo naprawiam wszystkie aspekty osi i przestrzeni kolorów itp., Aby wykresy były bezpośrednio porównywalne przez oko.Naprawianie kolorów na wykresach punktowych w matplotlib

Dla mojego życia nie mogę wymyślić wszystkich różnych sposobów ustalania zakresu kolorów. Próbowałem vmin, vmax, ale nic nie robi, próbowałem również clim (x, y) i to też nie działa.

To musi pojawić się tu i tam, nie mogę być jedynym, który chce porównać różne podzbiory danych między działkami ... tak, jak poprawiają kolory, aby każde dane utrzymywało kolor między działkami i nie zmienia się na inny kolor ze względu na zmianę maks./min. podzestawu -v- całego zestawu?

Odpowiedz

40

Ustawienia vmin i vmax powinny to zrobić.

Oto przykład:

import matplotlib.pyplot as plt 

xyc = range(20) 

plt.subplot(121) 
plt.scatter(xyc[:13], xyc[:13], c=xyc[:13], s=35, vmin=0, vmax=20) 
plt.colorbar() 
plt.xlim(0, 20) 
plt.ylim(0, 20) 

plt.subplot(122) 
plt.scatter(xyc[8:20], xyc[8:20], c=xyc[8:20], s=35, vmin=0, vmax=20) 
plt.colorbar() 
plt.xlim(0, 20) 
plt.ylim(0, 20) 

plt.show() 

a fabuła to produkuje:

alt text http://i45.tinypic.com/2qsqvrk.png

+0

Cześć Tom! Tak! To jest dokładnie to, czego chciałem. Użyłeś pod-działek, zamiast dwóch oddzielnych obrazów, co może być moim upadkiem. Chciałem wypróbować wątki z bardzo dużą 6-stronną stroną kreślącą jako przykładem (która była zgodna z tą zasadą). Zastanawiam się, czy vmin/vmax jest zepsuty na osobnych zdjęciach? Użyję twojego przykładu i przetestuję go dziś wieczorem lub jutro i wrócę z moimi wynikami! Będę mieć zaznaczenie, gdy wrócę najprawdopodobniej! :) Dziękuję za zamieszczenie odpowiedzi !! Do zobaczenia w ciągu 24 godzin tutaj. Twoje zdrowie!!!! (dodatkowa rosa dla ciebie, sir!) – AllenH

+0

właśnie przebiegł przykład - uwielbiam to - wyjaśnił mi kilka rzeczy w tym samym czasie. Interesujące, aby zobaczyć, że subplot jest powiązany ze wszystkimi plt. * Poniżej. Używałem do tego uchwytów. Teraz zmienię przykład dla poszczególnych działek. :) – AllenH

+0

OK! Używając prostego przykładu powyżej i po prostu kreśląc każdą figurę osobno (jak pracowałem z moim zestawem danych), kolor został zachowany! bardzo się cieszę, że to też! LOL. Może dlatego używam paska błędów pod moim rozkazem scatter ... ale zbadam. Udowodniłeś mi, że to działa! :) Dzięki, Tom! – AllenH

0

Ok, to naprawdę nie jest odpowiedzią, ale follow-up. Wyniki mojego kodowania zmieniają kod Toma powyżej. [nie jestem pewien, że chcę usunąć znak wyboru odpowiedzi, ponieważ powyższy kod działa i jest odpowiedzią na pytanie!]

Nie wydaje się, że działa on dla moich danych !! Poniżej znajduje się zmodyfikowany kod, który można wykorzystać z moimi danymi, aby wytworzyć wykres, który nie działał dla mnie z jakiegoś dziwnego powodu. Dane wejściowe pochodziły z funkcji h5py (import plików danych hdf5).

W poniższym przykładzie rf85 jest podzestawem macierzy dla dużej partii eksperymentów, w której moc promieniowania RF zastosowana w systemie wynosiła około 85 watów do przodu. Zasadniczo kroję i kroję dane na różne sposoby, aby spróbować zobaczyć trend. To jest 85 watów w porównaniu do pełnego zestawu danych, który jest bieżącym wejściem (jest więcej danych, ale to jest to, co mam na razie).

import numpy 
import matplotlib.pyplot as plt 

CurrentsArray = [array([ 0.83333333, 0.8  , 0.57142857, 0.83333333, 1.03333333, 
     0.25  , 0.81666667, 0.35714286, 0.26  , 0.57142857, 
     0.83333333, 0.47368421, 0.80645161, 0.47368421, 0.52631579, 
     0.36666667, 0.47368421, 0.57142857, 0.47368421, 0.47368421, 
     0.47368421, 0.47368421, 0.47368421, 0.61764706, 0.81081081, 
     0.41666667, 0.47368421, 0.47368421, 0.45  , 0.73333333, 
     0.8  , 0.8  , 0.8  , 0.47368421, 0.45  , 
     0.47368421, 0.83333333, 0.47368421, 0.22222222, 0.32894737, 
     0.57142857, 0.83333333, 0.83333333, 1.  , 1.  , 
     0.46666667])] 

growthTarray = [array([ 705., 620., 705., 725., 712., 705., 680., 680., 620., 
     660., 660., 740., 721., 730., 720., 720., 730., 705., 
     690., 705., 680., 715., 705., 670., 705., 705., 650., 
     725., 725., 650., 650., 650., 714., 740., 710., 717., 
     737., 740., 660., 705., 725., 650., 710., 703., 700., 650.])] 

CuSearray = [array([ 0.46395015, 0.30287259, 0.43496888, 0.46931773, 0.47685844, 
     0.44894925, 0.50727844, 0.45076198, 0.44977095, 0.41455029, 
     0.38089693, 0.98174953, 0.48600461, 0.65466528, 0.40563053, 
     0.22990327, 0.54372179, 0.43143358, 0.92515847, 0.73701742, 
     0.64152173, 0.52708783, 0.51794063, 0.49  , 0.48878252, 
     0.45119732, 0.2190089 , 0.43470776, 0.43509758, 0.52697697, 
     0.21576805, 0.32913721, 0.48828072, 0.62201997, 0.71442359, 
     0.55454867, 0.50981136, 0.48212956, 0.46  , 0.45732419, 
     0.43402525, 0.40290777, 0.38594786, 0.36777306, 0.36517926, 
     0.29880924])] 

PFarray = [array([ 384., 285., 280., 274., 185., 185., 184., 184., 184., 
     184., 184., 181., 110., 100., 100., 100., 85., 85., 
     84., 84., 84., 84., 84., 84., 84., 84., 84., 
     84., 84., 84., 84., 84., 27., 20., 5., 5., 
      1., 0., 0., 0., 0., 0., 0., 0., 0., 0.])] 

rf85growthTarray = [array([ 730., 705., 690., 705., 680., 715., 705., 670., 705., 
     705., 650., 725., 725., 650., 650., 650.])] 

rf85CuSearray = [array([ 0.54372179, 0.43143358, 0.92515847, 0.73701742, 0.64152173, 
     0.52708783, 0.51794063, 0.49  , 0.48878252, 0.45119732, 
     0.2190089 , 0.43470776, 0.43509758, 0.52697697, 0.21576805, 
     0.32913721])] 

rf85PFarray = [array([ 85., 85., 84., 84., 84., 84., 84., 84., 84., 84., 84., 
     84., 84., 84., 84., 84.])] 

rf85CurrentsArray = [array([ 0.54372179, 0.43143358, 0.92515847, 0.73701742, 0.64152173, 
     0.52708783, 0.51794063, 0.49  , 0.48878252, 0.45119732, 
     0.2190089 , 0.43470776, 0.43509758, 0.52697697, 0.21576805, 
     0.32913721])] 

Datavmax = max(max(CurrentsArray)) 
Datavmin = min(min(CurrentsArray)) 

plt.subplot(121) 
plt.scatter(growthTarray, CuSearray, PFarray, CurrentsArray, vmin=Datavmin, vmax=Datavmax, alpha=0.75) 
plt.colorbar() 
plt.xlim(600,760) 
plt.ylim(0,2.5) 

plt.subplot(122) 
plt.scatter(rf85growthTarray, rf85CuSearray, rf85PFarray, rf85CurrentsArray, vmin=Datavmin, vmax=Datavmax, alpha=0.75) 
plt.colorbar() 
plt.xlim(600,760) 
plt.ylim(0,2.5) 

plt.show() 

I wreszcie, wyjście:

colorfailed! http://i50.tinypic.com/21b6c7k.png

Należy pamiętać, że nie jest to idealne wyjście dla mojej pracy, ale nie wydać wysiłku co czyni go idealnym. Co jest jednak ważne: punkty danych, które rozpoznasz jako takie same między działkami , nie zawierają tego samego koloru, co, tak jak powinno być w oparciu o powyższe vmax vmin (jak sugeruje kod Toma).

To jest szalone. :(Mam nadzieję, że ktoś może rzucić na to światło dla mnie! Jestem pewien, że mój kod nie jest tak wspaniały, więc proszę, nie przejmujcie się obrażeniami, jeśli chodzi o mój kod !!

Dodatkowa torba firey-gorący Cheetos do każdego, kto może zaproponować sposób naprzód -Allen

update Tom10 złapany problem. - miałem nieumyślnie użył niewłaściwych danych dla jednego z moich sub-macierzy, powodując wartości do daj różne poziomy kolorów, niż się spodziewano (tj. moje dane były błędne!) Wielkie rekwizyty dla Toma za to - chciałbym móc dać mu jeszcze inny głos, ale ze względu na moją metodę zadawania tego pytania, nie mogę (sorry Tom !)

Zobacz także jego wspaniały przykład drukowania tekstu w wymienionych poniżej pozycjach danych.

Oto uaktualniony obraz pokazujący, że metoda Toma rzeczywiście działa, i że spisek był problem w moim kodu: alt text http://i50.tinypic.com/2ljgh8i.png

+1

Jest tak dlatego, że wartości kolorów są różne na każdym wykresie (tj. CurrentsArray i rf85CurrentsArray mają różne wartości przy tej samej współrzędnej xiy). Na przykład mała kropka wokół 1,0 na osi Y ma wartość koloru 0.47368421 na pierwszym wykresie i 0.92515847 na drugim. Możesz zobaczyć, że piszesz wartość obok każdego miejsca, używając plt.text (x, y, val). – tom10

+0

Przy okazji, myślę, że lepiej byłoby zapytać o to jako oddzielne pytanie, niż zadać to drugie pytanie jako odpowiedź. Tutaj muszę odpowiedzieć w komentarzu, który ma wiele ograniczeń - bez kodu, bez cyfr, bez formatowania itp. To jest twoje pierwsze pytanie "jak używać tej samej skali kolorów", twoje drugie pytanie jest bardziej "co jest nie tak z moim kodem". – tom10

+0

Ah! Dzięki za wskazówkę, Tom! Jestem nowy w stackoverflow, więc powoli szukam drogi. :). Doceniam to! Na pewno uważnie przyjrzę się wartościom! Nie powinny być różne! Problem z moją pracą, aby je wyprodukować, jeśli tak! Dziękuję Ci! – AllenH

Powiązane problemy