You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在镜像图中将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:12:26