2012-07-13 2 views
7

Chcę wyróżnić wybrane punkty i napotkać dziwne zachowanie. Najpierw niektóre fałszywe dane:r - ggplot2 - podświetlanie wybranych punktów i dziwnych zachowań

a <- 1:50 
b <- rnorm(50) 
mydata <- data.frame(a=a,b=b) 
ggplot(mydata,aes(x=a,y=b)) + geom_point() 

To działa poprawnie. Teraz, aby podkreślić pewne punkty, dodaję kolejną geom_point warstwy:

ggplot(mydata[20:40,],aes(x=a,y=b)) + 
    geom_point() + 
    geom_point(aes(x=a[c(10,12,13)],y=b[c(10,12,13)]),colour="red") 

Zauważ, że jestem wyświetlanie jedynie ograniczony zakres danych ([20:40]). Teraz przychodzi dziwne zachowanie:

ggplot(mydata[10:40,],aes(x=a,y=b)) + 
    geom_point() + 
    geom_point(aes(x=a[c(10,12,13)],y=b[c(10,12,13)]),colour="red") 

Zmiana rozmiaru wybranego zakresu, pojawia się błąd, grubsza przetłumaczyć z języka niemieckiego: Error...: Arguments implying different number of rows. O dziwo, zmienia się to w zależności od wybranego zakresu. [23:40] zadziała, [22:40] nie będzie.


Błąd w języku angielskim brzmi:

Error in data.frame(x = c(19L, 21L, 22L), y = c(0.28198, -0.6215, : 
    arguments imply differing number of rows: 3, 31 
+0

Mam nadzieję, że to nie przeszkadza, ale dodałem błąd w angielskiej – csgillespie

Odpowiedz

22

Jeśli dane różni się pomiędzy różnymi warstwami, to trzeba podać nowe dane dla każdej warstwy.

Można to zrobić z data=... argument dla każdego geom że potrzebuje innego dane:

set.seed(1) 
mydata <- data.frame(a=1:50, b=rnorm(50)) 
ggplot(mydata,aes(x=a,y=b)) + 
    geom_point(colour="blue") + 
    geom_point(data=mydata[10:13, ], aes(x=a, y=b), colour="red", size=5) 

enter image description here

+0

dobrze, nie dane jest rzeczywiście inny, tylko inny podzbiór. Ale to rozwiązanie jest co najmniej stabilne. Działa tylko z jawnym nazewnictwem ('data = ...'). Ale nie ma wytłumaczenia dla tego dziwnego błędu ... – lambu0815

+0

@ lambu0815 Fakt, że jest to inny podzestaw sprawia, że ​​jest inny. Miałeś ten dziwny błąd, ponieważ próbowałeś zmapować pojedynczą estetykę (x) na trzy różne elementy. Estetykę należy zmapować na nazwy kolumn. Nie musisz też jawnie nazwać argumentu 'data = ...', ale musisz mieć argumenty we właściwej kolejności, tj. 'Geom_point (aes (...), dane ...) – Andrie

0

Inną opcją dodawania warunki zarówno dla atrybutów koloru i rozmiaru, wewnątrz geom_point. Następnie ręcznie sterujemy tymi przy użyciu odpowiednio scale_colour_manual i scale_size_manual.

set.seed(1) 
mydata <- data.frame(a = 1:50, b = rnorm(50)) 
ggplot(mydata) + 
    geom_point(aes(x = a, y = b, colour = a > 9 & a < 14, size = a > 9 & a < 14)) + 
    scale_colour_manual(values = c("blue", "red")) + 
    scale_size_manual(values =c(1, 4))+ 
    theme(legend.position = "none") 

enter image description here