ayu*_*ush 8 r variance ggplot2
我不明白我应该如何提出这个问题所以我使用这种方法.
我有一个纬度 - 经度数据集.下面张贴的图片是我想要制作的图片.这是我的数据集:
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
....
Run Code Online (Sandbox Code Playgroud)
我使用geom_path()来查找路径.现在,如图所示.我已经突出了我想要做的路径周围的白色差异.这就是我计算方差的方法:
var.latitude <- var(Data$Latitude)
var.longitude <- var(Data$Longitude)
Run Code Online (Sandbox Code Playgroud)
我使用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)
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何突出白色区域?
我正在使用 ggplot 的多边形功能来解决这个问题,请参阅文档
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")
Run Code Online (Sandbox Code Playgroud)
你的方差很小,我乘以 10 才能在图表中看到。请注意,在您问题的图表中,您从误差条的鳍中绘制了区域,这几乎肯定不是您想要的。
var.latitude <- var(data$Latitude)*10
var.longitude <- var(data$Longitude)*10
Run Code Online (Sandbox Code Playgroud)
正如上面的评论中也指出的那样,将该区域计算为一个区域是一项琐碎的任务。我发现最简单的方法是重叠每个路径的两个多边形以及每个点的多边形。当然可能有更优雅的方法,但是嘿,它有效。
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)
}
Run Code Online (Sandbox Code Playgroud)
这是根据两个数据集绘制的,因此我们需要多次指定data
和。aes
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)
Run Code Online (Sandbox Code Playgroud)