晶格封装中的geom_encircle变体

时间:2018-12-05 19:17:20

标签: r ggplot2 lattice

考虑df

d <- data.frame(x=c(1,1,2),y=c(1,2,2)*100)

以及以下情节:

gg <- ggplot(d,aes(x,y))
gg <- gg + scale_x_continuous(expand=c(0.5,1))
gg <- gg + scale_y_continuous(expand=c(0.5,1))

gg + geom_encircle(s_shape=1, expand=0) + geom_point()

我想知道是否像ggplot / gggalt一样在晶格包中对图形的特定部分进行了某种形式的圆形或椭圆形设计。

1 个答案:

答案 0 :(得分:1)

panel.chull()叠加在情节上的凸包上并不难。 layer()中的latticeExtra函数使点阵图形更加像ggplot一样...

d <- data.frame(x=c(1,1,2),y=c(1,2,2)*100)
library(lattice)
library(latticeExtra)

panel.chull <- function(x, y, type="l", ...) {
    ch <- grDevices::chull(x, y)
    ch <- c(ch,ch[1]) ## close the polygon
    panel.xyplot(x[ch],y[ch], type=type, ...)
}

现在部署它:

g1 <- xyplot(y~x,data=d)  ## base plot
g1 + layer(panel.chull(x,y,col="red"))  ## add convex hull

enter image description here

注意:

  1. 要使它在分组变量下表现得更合理,可能还需要花费更多的工作
  2. 如果您想要geom_encircle的全部功能,则可以将该代码的全部内容导入到您自己的自定义面板函数中...