删除两个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图例之一[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 plotly subplots() 删除重复的图例条目