You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot2的ggparcoord中仅显示指定分组图例

解决ggparcoord平行坐标图图例部分显示的问题

我使用ggparcoord绘制平行坐标图,以数据框的第5列作为分组列。该列包含多个唯一值,绘图时会显示所有值对应的图例,希望修改代码仅显示部分图例,比如排除值>=410的图例。原代码如下:

suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(viridis))
suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(ggthemes))
suppressPackageStartupMessages(library(hrbrthemes))
suppressPackageStartupMessages(library(GGally))
suppressPackageStartupMessages(library(gridExtra))

plt2<-suppressWarnings(print(ggparcoord(data,
    columns = c(1,2,3, 4),
    groupColumn = 5,splineFactor = 20, #order = "skewness",#splineFactor = TRUE, order = "skewness",
    scale="globalminmax",
    showPoints = TRUE, title = "All Fts.",
    alphaLines = 0.5) )) +#+ scale_color_viridis(discrete=TRUE)
  theme_economist_white(base_family="Arial Narrow", gray_bg = FALSE)+
  scale_colour_economist()+
  theme(axis.line = element_line(color='black'), #legend.position = "none",
    plot.background = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank())+scale_x_discrete(limit=c('Min Rows', 'Max Depth', 'MTries','AUC'))+
  guides(colour = guide_legend(override.aes = list(alpha = 5)))
#+scale_colour_manual(limits = c("10", "60", "110", "160", "210", "260", "310", "360","410"))

解决方法

要仅显示部分图例,核心是通过颜色比例尺控制图例展示的类别,以下是两种可行方式:

方法1:在颜色比例尺中指定limits参数

直接在scale_colour_economist里设置limits,只包含需要显示的分组值,图例就只会展示这些指定值,同时不影响绘图中对应线条的显示(若要隐藏对应线条,需先过滤数据)。

比如要排除>=410的值,保留10、60、110、160、210、260、310、360,修改后的代码如下:

suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(viridis))
suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(ggthemes))
suppressPackageStartupMessages(library(hrbrthemes))
suppressPackageStartupMessages(library(GGally))
suppressPackageStartupMessages(library(gridExtra))

plt2<-suppressWarnings(print(ggparcoord(data,
    columns = c(1,2,3, 4),
    groupColumn = 5,splineFactor = 20,
    scale="globalminmax",
    showPoints = TRUE, title = "All Fts.",
    alphaLines = 0.5) )) +
  theme_economist_white(base_family="Arial Narrow", gray_bg = FALSE)+
  # 指定需要显示的分组值,排除>=410的类别
  scale_colour_economist(limits = c("10", "60", "110", "160", "210", "260", "310", "360"))+
  theme(axis.line = element_line(color='black'),
    plot.background = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank())+
  scale_x_discrete(limits=c('Min Rows', 'Max Depth', 'MTries','AUC'))+
  guides(colour = guide_legend(override.aes = list(alpha = 1))) # alpha取值范围为0-1,修正原代码的不合理设置

方法2:通过guides隐藏不需要的图例项

如果不想修改颜色比例尺,也可以在guides中针对>=410的类别设置alpha=0来隐藏图例,这种方式下对应线条仍会显示,仅图例不展示:

plt2<-suppressWarnings(print(ggparcoord(data,
    columns = c(1,2,3, 4),
    groupColumn = 5,splineFactor = 20,
    scale="globalminmax",
    showPoints = TRUE, title = "All Fts.",
    alphaLines = 0.5) )) +
  theme_economist_white(base_family="Arial Narrow", gray_bg = FALSE)+
  scale_colour_economist()+
  theme(axis.line = element_line(color='black'),
    plot.background = element_blank(),
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank())+
  scale_x_discrete(limits=c('Min Rows', 'Max Depth', 'MTries','AUC'))+
  guides(colour = guide_legend(override.aes = list(alpha = ifelse(levels(data[[5]]) >= 410, 0, 1))))

额外提示

如果需要同时隐藏>=410对应的线条和图例,建议先过滤数据:data_filtered <- data %>% filter(.[[5]] < 410),再使用data_filtered进行绘图。

内容的提问来源于stack exchange,提问作者lpt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 04:53:36