如何在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
相关产品推荐
相关产品推荐

