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

ggplot2添加顶部右侧次坐标轴并保留小刻度、移除次轴标签问题问询

解决方法

调整次坐标轴的参数配置即可解决你提到的两个问题,修改后完整代码如下:

data.bw <- structure(list(num = c(88L, 58L, 15L, 11L, 14L, 29L, 34L, 40L, 
24L, 20L, 3L, 1L, 1L), bar = c(0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 
6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5), group = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "A", class = "factor")), class = "data.frame", row.names = c(NA, 
-13L))

library(ggplot2)
library(ggh4x)
library(scales) # 用到alpha函数需要加载该依赖包

ggplot(data.bw, aes(bar,num, fill = group)) +
  geom_bar(stat = 'identity', width = 1) + 
  scale_fill_manual(values = alpha(c("red"), .3)) + # 保留所需填充样式,删除重复定义项
  scale_y_continuous(
    minor_breaks = seq(0, 90, by = 2),
    breaks = seq(0, 90, by = 10), limits = c(0, 90),
    expand = expansion(mult = c(0, 0)),
    # 次轴新增guide参数显示小刻度,新增labels=NULL隐藏刻度标签
    sec.axis = dup_axis(name = NULL, labels = NULL, guide = "axis_minor"),
    guide = "axis_minor" 
  ) +
  scale_x_continuous(
    minor_breaks = seq(0, 14, by = 0.5),
    breaks = seq(0, 14, by = 2), limits = c(0, 14),
    expand = expansion(mult = c(0, 0)),
    # 次轴参数调整逻辑同上
    sec.axis = dup_axis(name = NULL, labels = NULL, guide = "axis_minor"),
    guide = "axis_minor"
  ) +
  theme_bw() +
  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()
  )

关键修改说明

  • 次坐标轴默认不会继承主轴的guide配置,需要在dup_axis()中手动指定guide = "axis_minor",才能正常显示次轴的小刻度
  • 原有代码中仅设置name = NULL只会隐藏次轴的标题,要隐藏次轴的刻度文字需要额外添加labels = NULL参数
  • 原代码重复定义了两次scale_fill_manual,删除冗余项避免样式被意外覆盖

最终效果参考

内容的提问来源于stack exchange,提问作者neuron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:54:02