如何在ggplot中自定义Y轴刻度标签并解决显示异常问题
问题原因
- 未手动指定Y轴刻度断点:ggplot默认会生成规整的整数刻度(0、2、4、6),不会自动采用你数据里的1~6作为刻度,因此看不到1、3、5对应的标签。
- 自定义标签函数存在逻辑隐患:你写的
FN函数中,y=0分支返回的是字符串'y'不符合预期格式;如果参数传递异常导致grepl('Per', class)返回FALSE,会进入第二个分支计算y/100,得到的数值极小,展示时就会看起来全是0。
修复后的代码
library(zoo) library(quantmod) library(ggplot2) Data = data.frame('class' = rep(c('a', 'b', 'c'), 2), 'Date' = as.yearqtr(rep(c('2021 Q3', '2021 Q4'), each = 3)), 'Value' = 1:6) Met = 'Per' # 修正FN函数0值返回逻辑 FN = function(y, class) ifelse(y == 0, '0 aa1', ifelse(grepl('Per', class), paste0(y * 100, ' aa1'), paste0(y / 100, ' aa2'))) ggplot(Data, aes(x = Date, y = Value, fill = class)) + geom_bar(stat = 'identity', position = 'dodge', width = 0.1) + # 新增breaks参数指定刻度为1:6,匹配数据取值,同时保留自定义标签逻辑 scale_y_continuous(breaks = 1:6, labels = function(y) FN(y, Met))
运行修改后的代码,Y轴就会显示你预期的100 aa1、200 aa1直到600 aa1的标签。
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

