2012-11-13 13 views
5

Próbuję wykreślić wektor data w stylu przypominającym histogram. To zawsze jest łatwe, ponieważ plot(data, type="h") robi dokładnie to, co chcę. Wystąpił jednak problem z kolorem. Moja wektor data wygląda następująco:Wykres podobny do histogramu w różnych kolorach w R

data = c(1,2,2,3,1,1,2,3,1,2,2,3, ...) 

Co chcę zobaczyć, jest to, że każdy 1 wykreślono w jednym kolorze, każdy 2 w innym kolorze, a każdy 3 podobnie. Starałem się osiągnąć z

plot(data, type="h", col=c("red","blue","green") 

ale nie powiodło się z R zapętlenie nad wektora kolorów, tak że pierwszy bar był czerwony, drugi niebieski, zielony, trzeci czwarty czerwony ponownie i tak dalej.

Jestem bardzo interessted w ogólnym rozwiązaniem, ponieważ moi data wektory nie zawsze składają się z numerów 1, 2 i 3. W wielu przypadkach wektor zawiera liczby od 1 do 6.

Czy ktoś wie, jak rozwiązać ten problem?

Odpowiedz

11

Trzeba by stworzyć wektor kolorów o tej samej długości, jak to:

data = c(1,2,2,3,1,1,2,3,1,2,2,3) 
colors = c("red","blue","green") 
plot(data, type="h", col=colors[data]) 

To działa, ponieważ colors[data] wygląda następująco:

print(colors[data]) 
# [1] "red" "blue" "blue" "green" "red" "red" "blue" "green" "red" 
# [10] "blue" "blue" "green" 
+0

Jak mogę zastosować to do zakresu danych? Na przykład chciałbym mieć wszystko, co mieści się między -100 a 100 jako czerwone, a wszystko inne niebieskie? – user1007742

+0

@ user1007742: Użyj 'cut', aby podzielić: tj.' Mydatacut = cut (x, c (-Inf, -100, 100, Inf)) '. Spowoduje to utworzenie współczynnika z trzema poziomami Następnie możesz zrobić "colors [as.numeric (mydatacut)]", gdzie czynnikiem jest, w twoim przykładzie, 'c (" niebieski "," czerwony "," niebieski ")' –

6

spróbować to dla ogólnej metody:

data = c(1,2,2,3,1,1,2,3,1,2,2,3,4,5,6,7,12,3) 
colors = rainbow(length(unique(data))) 
plot(data, type="h", col=colors[data]) 
0
colors = rainbow(length(unique(data))); 
hist(data, col=colors[data]) 

Używanie mr. Dane lapalme (powyżej)

Powiązane problemy