вариант geom_encircle в решетчатом пакете - PullRequest
0 голосов
/ 05 декабря 2018

Рассмотрим 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 голосов
/ 10 декабря 2018

Нетрудно собрать 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, вы, вероятно, можете импортировать кишки этого кода в свою собственную функцию панели ...
...