ggplot отображает фронт Парето только для точек, принадлежащих определенному уровню

Используемые библиотеки

      install.packages("rPref")
install.packages("dplyr")
install.packages("igraph")
install.packages("ggplot") 

Принимая mtcarsнабор данных из R в качестве примера.

Чтобы найти границу Парето и значение уровня, необходимо установить предпочтения

      p <- high(mpg) * high(hp) 

Затем вычислите значение уровня относительно p, используя top-all

      res <- psel(mtcars, p, top = nrow(mtcars))

Когда человек создает визуализацию следующим образом

      gp <- ggplot(res, aes(x = mpg, y = hp, color = factor(.level))) + geom_point(size = 3)

Он покажет график со значениями миль на галлон и л.с. mtcars с цветами, и каждый цвет представляет уровень (близость к оптимальному). Следующим образом

Если кто-то хочет построить линию фронта Парето для каждой области всех точек более низкого уровня, можно запустить

      gp + geom_step(direction = "vh") 

Это приводит к

Однако, поскольку в данном случае имеет значение только 1-й уровень, как можно отобразить только точки и определенный фронт парето для уровня 1?

Изменение factor(.level)к factor(1)в качестве

      gp <- ggplot(res, aes(x = mpg, y = hp, color = factor(1))) + geom_point(size = 3)

Дает следующее, которое игнорирует предыдущие уровни, но некоторые из них, которые не относятся к уровню 1, по-видимому, представлены в нем.

1 ответ

Это то, что вы ищете?

      data(mtcars)
p <- high(mtcars$mpg) * high(mtcars$hp) 

res <- psel(mtcars, p, top = nrow(mtcars))
res1 <- res %>% filter(.level == "1")
gp <- ggplot() + 
  geom_point(data = res, aes(x = mpg, y = hp, color = factor(.level)), size = 3) + 
  geom_step(data = res1 , aes(x=mpg, y=hp, color=factor(.level)))


Изменить, чтобы разрешить комментарии

Вот тот же график без других точек:

      res %>% filter(.level == "1") %>% 
  ggplot() + 
    geom_point(aes(x = mpg, y = hp), size = 3) + 
    geom_step(aes(x=mpg, y=hp))

Другие вопросы по тегам