ggplot 仅针对属于特定级别的点显示帕累托前沿

ggplot display Pareto front only for the points that belong to a specific level

正在使用的库

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

mtcars来自R的数据集为例

为了找到 Pareto 边界和水平值,请建立偏好

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

然后计算level-valuew.r.t。 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 的 mpg 和 hp 值的图表,每种颜色代表级别(接近最佳值)。如下

如果要为下一级所有点的每个区域绘制帕累托前线,可以运行

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 的内容

这是您要找的吗?

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