使用ggplot的scale_alpha_manual隐藏柱状图后移除对应图例标签的方法
使用ggplot的scale_alpha_manual隐藏柱状图后移除对应图例标签的方法
嗨,我来帮你搞定这个问题!你已经用scale_alpha_manual把disrupted对应的柱子设成几乎透明,但图例里还留着这个标签对吧?其实有个超简单的办法就能解决,直接在图例设置里指定要显示的类别就行。
你只需要修改guides(fill=...)这一行,加上breaks = "ces"参数,告诉ggplot只在fill图例里显示ces这个类别,disrupted就会自动从图例里消失啦,而且完全不影响你之前设置的柱子隐藏效果,柱子的位置也会保留哦。
给你看修改后的完整代码:
df <- structure(list(variable = c("Oil", "Oil", "Gas", "Gas"), case = c("ces", "disrupted", "ces", "disrupted"), delta = c(7.52, -0.27, 1.13, 0.02)), row.names = c(NA, -4L), class = c("tbl_df", "tbl", "data.frame" )) ggplot(data = df, aes(x=variable, y = delta, fill=case, alpha = factor(case))) + scale_alpha_manual(values = c("ces"= 1, "disrupted"=0.001), guide='none') + geom_col(position = "dodge") + guides(fill=guide_legend(ncol=1, title="", breaks = "ces"))
原理很简单:breaks参数可以筛选图例中要展示的类别,只保留你指定的选项。如果你之后需要调整多个显示类别,把breaks改成向量形式就行,比如breaks = c("ces", "other_category"),非常灵活。
另外还有一种思路,你也可以直接在scale_fill_discrete里设置breaks,效果是一样的:
ggplot(data = df, aes(x=variable, y = delta, fill=case, alpha = factor(case))) + scale_alpha_manual(values = c("ces"= 1, "disrupted"=0.001), guide='none') + geom_col(position = "dodge") + scale_fill_discrete(breaks = "ces") + guides(fill=guide_legend(ncol=1, title=""))
选哪种方式都可以,看你个人习惯~
备注:内容来源于stack exchange,提问作者Hossein
相关产品推荐
相关产品推荐

