2015-07-05 16 views
8

Nie mogę się dowiedzieć, jak powinienem podać te pytania, więc użyłem tej metody.Jak mogę podkreślić wariancję ponad ggplot?

Mam zestaw danych o pełnej długości geograficznej. Obraz pisał poniżej to, co chcę produkować .. To jest mój zestaw danych:

Latitude Longitude 
21.06941667 71.07952778 
21.06941667 71.07952778 
21.06666667 71.08158333 
21.07186111 71.08688889 
21.08625 71.07083333 
21.08719444 71.07286111 
21.08580556 71.07686111 
21.07894444 71.08225 
.... 

enter image description here

Użyłem geom_path(), aby znaleźć drogę. Teraz, jak pokazano na rys. Podkreśliłem wariancję z białym kolorem wokół ścieżki, którą chcę zrobić. ten sposób I oblicza wariancję:

var.latitude <- var(Data$Latitude) 
var.longitude <- var(Data$Longitude) 

mam zaznaczone wariancję nad punktami używając geom_errorbar():

geom_errorbar(aes(x=Latitude,y=Longitude, ymin=Longitude-var.longitude, ymax=Longitude+var.longitude),width=0.001)+ 
geom_errorbarh(aes(xmin=Latitude-var.latitude,xmax=Latitude+var.latitude),height=0.001) 

Czy ktoś może mi powiedzieć, w jaki sposób należy podkreślić biały obszar?

+0

chcesz zrobić barwienia biały obszar? –

+1

możesz * dodać * grubą białą ścieżkę 'geom_path (dane = dane, aes (x = szerokość geograficzna, y = długość geograficzna), rozmiar = 8, kolor =" biały ")' – tospig

+0

@HemantRupani tak! To jest problem. – ayush

Odpowiedz

4

Jestem zbliża się ten z funkcją wieloboku ggplot patrz the documentation

library(ggplot2)  
data = rbind.data.frame(c(21.06941667, 71.07952778), 
         c(21.06666667, 71.08158333), 
         c(21.07186111, 71.08688889), 
         c(21.08625 , 71.07083333), 
         c(21.08719444, 71.07286111), 
         c(21.08580556, 71.07686111), 
         c(21.07894444, 71.08225)) 
names(data) = c("Latitude",  "Longitude") 

Twój rozbieżność jest niewielka, to pomnożyć przez 10, aby była ona widoczna na wykresie. Zauważ, że na wykresie w twoim pytaniu narysujesz obszar z płetw na listach błędów, co prawie na pewno nie jest tym, czego potrzebujesz.

var.latitude <- var(data$Latitude)*10 
var.longitude <- var(data$Longitude)*10 

Obliczenie tego obszaru jako jednego jest zadaniem ubocznym, jak również zaznaczono w komentarzach powyżej. Odkryłem, że najprostszym sposobem na to jest nakładanie się dwóch wielokątów dla każdej ścieżki oraz wielokąta dla każdego punktu. Na pewno mogą być bardziej eleganckie sposoby, ale hej, działa.

pos.poly = data.frame(id = paste0("c", as.character(1)), 
         x = c(data$Latitude[1]-var.latitude, data$Latitude[1], data$Latitude[1]+var.latitude, data$Latitude[1]), 
         y = c(data$Longitude[1], data$Longitude[1]+var.longitude, data$Longitude[1], data$Longitude[1]-var.longitude)) 
for(i in 2:dim(data)[1]){ 
    loc.pos1 = data.frame(id = paste0("a", as.character(i)), 
         x = c(data$Latitude[i-1]-var.latitude, data$Latitude[i]-var.latitude, 
          data$Latitude[i]+var.latitude, data$Latitude[i-1]+var.latitude), 
         y = c(data$Longitude[i-1], data$Longitude[i], data$Longitude[i], data$Longitude[i-1])) 
    pos.poly = rbind(pos.poly, loc.pos1) 
    loc.pos2 = data.frame(id = paste0("b", as.character(i)), 
         x = c(data$Latitude[i-1], data$Latitude[i], data$Latitude[i], data$Latitude[i-1]), 
         y = c(data$Longitude[i-1]+var.longitude, data$Longitude[i]+var.longitude, 
           data$Longitude[i]-var.longitude, data$Longitude[i-1]-var.longitude)) 
    pos.poly = rbind(pos.poly, loc.pos2) 
    loc.pos3 = data.frame(id = paste0("c", as.character(i)), 
         x = c(data$Latitude[i]-var.latitude, data$Latitude[i], data$Latitude[i]+var.latitude, data$Latitude[i]), 
         y = c(data$Longitude[i], data$Longitude[i]+var.longitude, data$Longitude[i], data$Longitude[i]-var.longitude)) 
    pos.poly = rbind(pos.poly, loc.pos3) 
} 

ten wykreślono z dwóch zestawów danych tak musimy określić data i aes kilka razy.

plot1 = ggplot(pos.poly, aes(x=x, y=y)) + geom_polygon(aes(group=id), fill="white") + geom_path(data = data, aes(x=Latitude, y=Longitude)) 
plot1 = plot1 + xlab("Latitude") + ylab("Longitude") + 
    geom_errorbar(data = data, aes(x=Latitude,y=Longitude, ymin=Longitude-var.longitude, ymax=Longitude+var.longitude)) + 
    geom_errorbarh(data = data, aes(xmin=Latitude-var.latitude,xmax=Latitude+var.latitude, x=Latitude, y=Longitude)) 
print(plot1) 

enter image description here

+1

wygląda świetnie dla mnie +1 – CMichael

+1

Odchylenie w kierunku y wydaje się być obsługiwane nieprawidłowo, patrz np. punkt o największej długości geograficznej lub o najniższej długości geograficznej. Byłoby również dobrze użyć zmiennych wariancji, aby kod poprawnie obsługiwał narożniki. –

+0

@ ClausWilke, podczas gdy to na pewno wygląda dziwnie (i na początku też mnie przestraszyło) wydaje mi się pożądanym zachowaniem: wariancja w kierunku X jest tak duża, a biały obszar odpowiada temu, co otrzymasz od przesunięcia kropki z paskami błędu od punktu do punkt wzdłuż ścieżki. – mts

Powiązane problemy