如何在镜像图中将Y轴及其标签移至中心(x=0处)
将Y轴移至镜像条形图的中心(x=0处)
要把Y轴挪到红绿条形中间的x=0位置,直接修改你的ggplot代码即可,核心是调整主题里的Y轴位置,同时确保x轴范围对称。修改后的代码如下:
ggplot() + geom_bar(data = upreg_match, aes(x=Up,y=BIN_names), fill = "yellowgreen", color = "black", stat = "identity")+ geom_bar(data = downreg_match, aes(x=Down,y=BIN_names), fill = "tomato3", color = "black", stat = "identity")+ labs(x = "", y = "")+ ggtitle("Controls") + theme_bw() + # 根据你的数据正负最大值调整x轴范围,保证0在中心 scale_x_continuous(limits = c(-max(abs(downreg_match$Down)), max(upreg_match$Up))) + # 把Y轴线条移到x=0处 theme( axis.line.y = element_line(position = "zero"), # 调整Y轴标签的对齐方式,避免被条形挡住 axis.text.y = element_text(hjust = 1) )
关键说明:
scale_x_continuous(limits = ...):手动设置x轴的左右边界,你需要替换成自己数据里的负向最大值(取绝对值)和正向最大值,这样0点才会刚好落在两个条形组的中间。axis.line.y = element_line(position = "zero"):这一步是核心,直接把Y轴的线条定位到x=0的位置。axis.text.y = element_text(hjust = 1):调整Y轴刻度标签的水平对齐,避免被左侧或右侧的条形遮挡,让标签清晰显示在Y轴旁边。
如果你想让代码更简洁规范,可以把两个数据集合并后再绘图,这样不用重复调用geom_bar,示例代码如下:
# 先加载dplyr包用于数据合并 library(dplyr) # 合并上下调数据,统一x轴的正负值 combined_data <- bind_rows( upreg_match %>% mutate(type = "上调", x_value = Up), downreg_match %>% mutate(type = "下调", x_value = -abs(Down)) # 把下调值转为负数 ) ggplot(combined_data, aes(x = x_value, y = BIN_names, fill = type)) + geom_bar(color = "black", stat = "identity") + scale_fill_manual(values = c("上调" = "yellowgreen", "下调" = "tomato3")) + labs(x = "", y = "", fill = "") + ggtitle("Controls") + theme_bw() + scale_x_continuous(limits = c(-max(abs(combined_data$x_value)), max(abs(combined_data$x_value)))) + theme( axis.line.y = element_line(position = "zero"), axis.text.y = element_text(hjust = 1) )
内容的提问来源于stack exchange,提问作者Anastasia
相关产品推荐
相关产品推荐

