如何在R ggplot中反转坐标轴、控制条形方向并实现0值居中?
实现以0为中心、左正右负的横向条形图
嘿,我明白你想要的效果——让0作为横向条形图的中心,正值往左延伸、负值往右延伸对吧?你的现有代码已经接近了,但scale_y_reverse()和coord_flip()的组合让轴的对齐有点偏差,我们可以调整一下来实现完美的居中效果。
下面给你两种可行的解决方案:
方案一:调整轴反转与位置
这种方法直接修改轴的设置,不用改动原始数据:
tdf<-data.frame(prcnt=c(-50,25,-80,5,10,-40),nm=c('AB','BC','CD','DE','EF','FG'),catg=c(rep('catA',2),rep('catB',2),rep('catC',2))) ggplot(tdf, aes(nm, prcnt, fill = catg)) + geom_col() + # 设置对称的y轴范围,确保0处于中心,expand=c(0,0)去掉轴两端的空白 scale_y_continuous(limits = c(-100, 100), expand = c(0, 0)) + coord_flip() + # 反转y轴(翻转后对应横向的x轴),并将刻度放在右侧,让0自然居中 scale_y_reverse(position = "right")
方案二:反转数值并修正标签
如果你觉得轴设置有点绕,也可以通过反转数值映射,再修正轴标签来实现:
tdf<-data.frame(prcnt=c(-50,25,-80,5,10,-40),nm=c('AB','BC','CD','DE','EF','FG'),catg=c(rep('catA',2),rep('catB',2),rep('catC',2))) ggplot(tdf, aes(nm, -prcnt, fill = catg)) + geom_col() + # 设置对称范围,同时把轴标签反转回原始数值 scale_y_continuous(limits = c(-100, 100), breaks = seq(-100, 100, 20), labels = function(x) -x) + coord_flip()
两种方法都能实现你要的效果:0在图表中心,正值条形向左、负值条形向右。你可以根据自己的习惯选一种就行~
内容的提问来源于stack exchange,提问作者Spencer Trinh
相关产品推荐
相关产品推荐

