如何在ggplot2绘制的柱状图中移除指定的两个标签值
解决方案
你可以直接在geom_text()的标签映射中加入条件判断,精准过滤要隐藏的两个数值,无需调整数据集结构,也不会影响柱子的正常渲染:
将原geom_text代码中的label = bar*310替换为条件判断逻辑:label = ifelse(round(bar*310) %in% c(1, 130), "", as.character(round(bar*310))),即可把1和130两个标签替换为空,实现隐藏效果,加入round是为了避免浮点计算误差导致匹配失效。
修改后的完整代码:
ggplot() + geom_bar(data=data.bw, aes(x = num, y = bar),position = position_dodge(),stat = 'identity', width = 0.75,fill = "#D0D3D4", alpha=0.5) + # 仅修改此处的label映射逻辑 geom_text(data=data.bw, aes(x= num, y = bar,label = ifelse(round(bar*310) %in% c(1,130), "", round(bar*310))), vjust = -0.2, size=4.5) + scale_y_continuous( #minor_breaks = seq(0, 1, by = 50), breaks = seq(0, 1), limits = c(0, 1), expand = expansion(mult = c(0, 0)), #guide = "axis_minor" ) + scale_x_continuous( #minor_breaks = seq(0, 25, by = 5), #breaks = seq(0, 25, by = 2), limits = c(0, 25), expand = expansion(mult = c(0, 0)), #guide = "axis_minor" ) + guides(x.sec = "axis_minor", y.sec = "axis_minor") + scale_fill_manual(values = alpha(c("red"), .3)) + ylab("Probability") + xlab("Number") + theme_bw() + guides(color = guide_legend(override.aes = list(shape = c(9,8)))) + theme( panel.border = element_rect(colour = "black", fill=NA, size=1), plot.background = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.text.x.top = element_blank(), axis.text.y.right = element_blank(), axis.text.x = element_text(color = "grey20", size = 12, hjust = .5, vjust = .5, face = "plain"), axis.text.y = element_text(color = "grey20", size = 12, hjust = .5, vjust = 0.2, face = "plain"), axis.title.x = element_text(color = "grey20", size = 14, hjust = .5, vjust = 0, face = "plain"), axis.title.y = element_text(color = "grey20", size = 16, hjust = .5, vjust = .5, face = "plain"), plot.margin = margin(20, 3, 10, 3), legend.title = element_blank(), legend.text=element_text(size=12) )
效果展示
- 调整前:

- 调整后:

内容的提问来源于stack exchange,提问作者neuron
相关产品推荐
相关产品推荐

