删除两个ggplot图例之一[重复]

Posted

技术标签:

【中文标题】删除两个ggplot图例之一[重复]【英文标题】:Removing one of two ggplot legends [duplicate] 【发布时间】:2020-07-08 20:06:16 【问题描述】:

我无法弄清楚为什么 ggplot 给出了两个图例。我想要图例标题“重采样技术”,但我更喜欢底部图例中的图例图标。我怎样才能调整我的代码来完成这个?我认为删除 group 或 color 参数可能会解决此问题,但它不起作用。

library(ggplot2)

df <- read.table(textConnection(
  'Obs misclass  IR      resample
  1  0.134466667   1      Original
  2  0.123200000   2      Original
  3  0.097706667   4      Original
  4  0.065955556   8      Original
  5  0.041427451  16      Original
  6  0.024301010  32      Original
  7  0.013343590  64      Original
  8  0.007186563 128      Original
  9  0.139200000   1         Smote
  10 0.134733333   2         Smote
  11 0.137426667   4         Smote
  12 0.135103704   8         Smote
  13 0.131972549  16         Smote
  14 0.132014141  32         Smote
  15 0.131394872  64         Smote
  16 0.132234625 128         Smote
  17 0.137133333   1 Undersampling
  18 0.136555556   2 Undersampling
  19 0.135893333   4 Undersampling
  20 0.138703704   8 Undersampling
  21 0.138607843  16 Undersampling
  22 0.138365657  32 Undersampling
  23 0.135341538  64 Undersampling
  24 0.139755556 128 Undersampling
  25 0.142733333   1        Hybrid
  26 0.136600000   2        Hybrid
  27 0.137640000   4        Hybrid
  28 0.136044444   8        Hybrid
  29 0.132800000  16        Hybrid
  30 0.133644444  32        Hybrid
  31 0.134152821  64        Hybrid
  32 0.132190698 128        Hybrid'), header = TRUE)


   hw <- theme(
  plot.title=element_text(hjust=0.5,face='bold',size=23),
  axis.title.y=element_text(angle=0,vjust=.5,face='bold',size=23),
  axis.title.x=element_text(face='bold',size=23),
  plot.subtitle=element_text(hjust=0.5),
  plot.caption=element_text(hjust=-.5),

  strip.text.y = element_blank(),
  strip.background=element_rect(fill=rgb(.9,.95,1),
                                colour=gray(.5), size=.2),

  panel.border=element_rect(fill=FALSE,colour=gray(.70)),
  panel.grid.minor.y = element_blank(),
  panel.grid.minor.x = element_blank(),
  panel.spacing.x = unit(0.10,"cm"),
  panel.spacing.y = unit(0.05,"cm"),
  axis.ticks=element_blank(),
  axis.text=element_text(colour="black"),
  axis.text.y=element_text(margin=ggplot2::margin(0,3,0,3),face="bold",size=20),
  axis.text.x=element_text(margin=ggplot2::margin(-1,0,3,0),face="bold",size=20),
  panel.background = element_rect(fill = "gray"),
  legend.title=element_text(face="bold",size=23),
  legend.text=element_text(size=20,face="bold"),
  legend.title.align=0.5
)


ggplot(df, aes(x=factor(IR), y=misclass, colour = as.factor(resample),group=as.factor(resample))) +
  geom_line(lwd=1) +
  geom_point(shape=24,size=3,aes(color=as.factor(resample),fill=as.factor(resample))) +hw+
  scale_y_continuous(breaks=seq(0,0.15,0.025))+
  scale_x_discrete(breaks=2^(0:7),labels=c("1","2","4","8","16","32","64","128"))+
  labs(x="Imbalance Ratio",y="Risk")+
  guides(colour=guide_legend(title="Resampling\nTechnique"))

【问题讨论】:

从您的代码中删除 ,fill=as.factor(resample)+hw。它只会给你一个传奇。 哎呀,我完全忘了在我的代码中包含hw 对象。我想保留它。删除填充会使三角形透明,但我希望它们保持填充状态。 我刚刚将fill=FALSE 包含在guides() 中,这会删除图例,但图标仍然是透明的。 【参考方案1】:

使用以下代码

ggplot(df, aes(x=factor(IR), y=misclass, colour = as.factor(resample),group=as.factor(resample))) +
  geom_line(lwd=1) +
  geom_point(shape=24,size=3,aes(color=as.factor(resample),fill=as.factor(resample)), show.legend = F) +hw+
  scale_y_continuous(breaks=seq(0,0.15,0.025))+
  scale_x_discrete(breaks=2^(0:7),labels=c("1","2","4","8","16","32","64","128"))+
  labs(x="Imbalance Ratio",y="Risk")+
  guides(colour=guide_legend(title="Resampling\nTechnique"))

我在geom_point 中添加了, show.legend = F 以删除多余的图例。

【讨论】:

【参考方案2】:

如果要保留图例中的点,只需要更改最后一个guides

  guides(fill=guide_legend(title="Resampling\nTechnique"), color=FALSE)

【讨论】:

以上是关于删除两个ggplot图例之一[重复]的主要内容,如果未能解决你的问题,请参考以下文章

当有多个 [重复] 时删除 ggplot2 中的额外图例

使用ggplot2在叠加密度图中重复图例

如何使用 plotly subplots() 删除重复的图例条目

ggplot2:每个方面网格的空间图例/操纵各个图例条目的位置[重复]

使用ggplot插入图例[重复]

ggplot2:如何显示图例[重复]