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

geom_bar绘图中Y轴指定刻度未显示的问题求助

解决ggplot2 Y轴刻度不显示及数值格式问题

问题根源

  1. 你的value列是字符类型(从数据结构可见,数值被包裹在引号中),且部分值存在空格(如"158 .277"),导致ggplot无法正确识别为连续数值。
  2. 错误使用scale_y_discrete()处理连续型数据:你要展示的是连续性能数值,却用了离散型刻度设置,导致指定的数值breaks无法匹配字符型数据,刻度不显示。

解决步骤

  1. 清理并转换数值列:先去除value中的空格,再转为数值类型。
  2. 替换刻度设置函数:用scale_y_continuous()替代scale_y_discrete(),指定整数刻度的breaks,同时可通过labels参数强制显示整数格式。
  3. 保留原有图表主题和分面设置。

完整修正代码

# 加载包
library(ggplot2)

# 数据(直接用dput的结构,也可以读取csv后处理)
data <- structure(list(specie = c("gmx mdrun -s benchMEM.tpr -nsteps 10000", 
"gmx mdrun -s benchMEM.tpr -nsteps 10000", "gmx mdrun  -s benchPEP.tpr -nsteps 10000 ", 
"gmx mdrun  -s benchPEP.tpr -nsteps 10000 ", "gmx mdrun  -s benchPEP-h.tpr -nsteps 10000 ", 
"gmx mdrun  -s benchPEP-h.tpr -nsteps 10000 ", "gmx mdrun  -s MD_5NM_WATER.tpr -nsteps 10000 ", 
"gmx mdrun  -s MD_5NM_WATER.tpr -nsteps 10000 ", "gmx mdrun  -s data/MD_10NM_WATER.tpr -nsteps 10000 ", 
"gmx mdrun  -s data/MD_10NM_WATER.tpr -nsteps 10000 ", "gmx mdrun -s MD_15NM_WATER.tpr -nsteps 10000 ", 
"gmx mdrun -s MD_15NM_WATER.tpr -nsteps 10000 "), condition = c("CUDA", 
"SYCL", "CUDA", "SYCL", "CUDA", "SYCL", "CUDA", "SYCL", "CUDA", 
"SYCL", "CUDA", "SYCL"), value = c("54.682", "77.649", "0.673", 
"0.841", "0.86", "0.986", "452.48", "158 .277", "81.426", "80.454", 
"33.449", "34.363")), class = "data.frame", row.names = c(NA, 
-12L))

# 处理value列:去除空格,转为数值
data$value <- as.numeric(gsub(" ", "", data$value))

# 绘制图表
myplot <- ggplot(data, aes(fill=condition, y=value, x=condition)) + 
    geom_bar(position="dodge", stat="identity") +
    scale_fill_manual(values=c("#ffffb2", "#fecc5c"))+
    # 用连续型刻度设置,指定整数breaks,labels强制显示整数
    scale_y_continuous(breaks=c(0,10,20,30,40,50,60,70,80,100,450),
                      labels=as.character(c(0,10,20,30,40,50,60,70,80,100,450)))+
    ylab("Performance (ns/day) on Extreme") +
    facet_wrap(~specie,nrow=3, labeller = label_wrap_gen(width = 85)) +
    theme_bw() +
    theme(panel.grid = element_blank(),
          panel.spacing = unit(0, "mm"),
          legend.title=element_blank(),
          axis.title.x = element_blank(), 
          axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

# 叠加最终主题设置
myplot + theme(panel.grid.major = element_blank(), 
               panel.grid.minor = element_blank(), 
               legend.title=element_blank(), 
               panel.background = element_blank(), 
               axis.title.x = element_blank(), 
               axis.text.x=element_blank(), 
               axis.ticks.x=element_blank(), 
               axis.title.y = element_text(angle = 90, hjust = 0.5, size = 20))

关键说明

  • gsub(" ", "", data$value):清理数值中的空格(如"158 .277"转为"158.277"),确保转数值时不报错。
  • scale_y_continuous():针对连续型Y轴设置刻度,breaks包含你需要的整数刻度(额外添加了0、100、450适配数据最大值),labels参数确保刻度显示为整数格式。
  • 若不需要显示超过80的刻度,可调整breaks为c(0,10,20,30,40,50,60,70,80),但注意数据中有452.48这样的大值,图表会自动适配Y轴范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:24:52