如何突出显示 ggplot 上的方差?

How can I highlight variance over a ggplot?

我不知道该如何提出这个问题,所以我用了这个方法。

我有一个经纬度数据集。下面张贴的图片是我想要制作的。这是我的数据集:

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
....

我已经使用 geom_path() 找到了路径。现在,如图所示。我用白色突出显示了我想要做的路径周围的差异。 这是我计算方差的方法:

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

我已经使用 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)

谁能告诉我应该如何突出显示白色区域?

我正在使用 ggplot 的多边形功能来解决这个问题,请参阅 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")

您的方差很小,我乘以 10 使其在图表中可见。请注意,在您问题的图表中,您从误差条的鳍部绘制了区域,这几乎肯定不是您想要的。

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

正如上面的评论中所指出的那样,将这个区域计算为一个是一项微不足道的任务。我发现最简单的方法是为每条路径重叠两个多边形,并为每个点重叠一个多边形。当然可能有更优雅的方法,但是,嘿,它有效。

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)
}

这是根据两个数据集绘制的,因此我们需要多次指定 dataaes

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)