如何用ggplot2调整y轴刻度,绘制0.9-1范围等距的柱状图?
解决ggplot2柱状图Y轴非等距问题
核心修复:将字符型数据转为数值型
Y轴非等距的根源是col3为字符类型,ggplot会自动将其识别为离散变量。必须先把该列转换为数值型:
# 转换col3为数值型 data$col3 <- as.numeric(data$col3)
设置Y轴范围与等距刻度
数据类型转换完成后,使用scale_y_continuous()指定Y轴范围(0.9-1),并配置等距刻度。可根据需求调整刻度间隔:
完整修改代码
col1 <- c('SO','MO','EO','YO','RO') col2 <- c('J','J','J','J','J', 'F','F','F','F','F', 'M','M','M','M','M', 'G','G','G','G','G') col3 <- c('0.92966','0.94522','0.93311','0.995222', '0.966463','0.975725','0.976464','0.9635321', '0.980223','0.9124456','0.991678','0.973444', '0.910789','0.922','0.993444','0.956555', '0.923132','0.987222','0.900556','0.932228') data <- data.frame(col1,col2,col3) # 关键步骤:转换col3为数值型 data$col3 <- as.numeric(data$col3) library(ggplot2) ggplot(data, aes(x=col1, y=col3,fill=col2)) + labs(x = "col1", y = "col3")+ geom_bar(stat = 'identity', position=position_dodge())+ scale_fill_discrete(breaks = c("J","F","M",'G'))+ theme(legend.title = element_text( size=12, face="bold"), legend.text = element_text(size =12), axis.title.x = element_text(size = 13, face="bold"), axis.title.y = element_text(size = 13, face="bold"), axis.text.x = element_text(size = 12, face="bold"), axis.text.y = element_text(size = 12,face="bold"))+ scale_x_discrete(limits = c('SO','MO','EO','YO','RO'))+ # 配置Y轴范围和等距刻度 scale_y_continuous( limits = c(0.9, 1), breaks = seq(0.9, 1, by = 0.02) # 按0.02间隔生成刻度,可自行修改间隔值 )
补充说明
- 若不需要密集刻度,可手动指定刻度点,比如
breaks = c(0.9, 0.95, 1) - 必须先转换数据类型,否则连续轴设置不会生效
内容的提问来源于stack exchange,提问作者TUSTLGC
相关产品推荐
相关产品推荐

