R语言ggplot批量遍历多变量绘图y轴异常及刻度设置报错咨询
问题核心原因
两个报错本质是同一个根源导致的:你构造数据集时将所有数值存储为了字符类型:
- 你构造数值列时用
rbind()包裹了带引号的数值,生成的是字符矩阵,data.frame()默认不会自动转数值,因此三个指标列都是字符类型而非数值类型 - 绘图代码中主动加了
scale_y_discrete(),强制将y轴设为离散刻度,字符型的y值会按字典序而非数值大小排序,直接导致y轴数值顺序混乱 - 当你替换成
scale_y_continuous()时,y轴是字符型的离散值,与连续比例尺要求的数值类型不匹配,就会触发Discrete value supplied to continuous scale报错
修复方案
第一步:修正数据集的列类型
优先推荐直接在构造数据集时去掉数值的引号,同时用向量生成函数c()替代错误的rbind()(rbind是行绑定,用来生成单列向量逻辑错误,会生成矩阵列引发后续类型问题):
date1 <- c("February", "March", "April", "May", "June", "July", "August", "September", "October", "November") sum1.visit_bush. <- c(0, 0, 1, -0.75, 2, 0, 0.333333333333333, 1.25, 0, -1) sum1.counts_bush. <- c(0, 0.115290451813933, -0.557273997206146, 0.146270002253775, 0.100865119937082, 0.512412930880514, 0.435049598488427, -0.0831961816984858, 0.824791311372408, -0.156025577963601) sum1.hcounts_bush. <- c(0, 0.0387010676156584, -0.625695931477516, 0.47254004576659, -0.233100233100233, 0.99290780141844, -0.032536858159634, 0.349973725696269, 0.660957571039315, -0.341223341926412) evolution1 <- data.frame(date1, sum1.visit_bush., sum1.counts_bush., sum1.hcounts_bush.)
如果你不想修改原始的数据集构造代码,也可以直接对已有数据集做类型转换:
evolution1[, 2:4] <- lapply(evolution1[, 2:4], function(x) as.numeric(as.character(x)))
第二步:修改绘图函数的y轴配置
将函数里原来的scale_y_discrete()删掉,替换为你需要的连续y轴配置即可:
# 替换原有scale_y_discrete() scale_y_continuous(breaks = seq(-1, 2, 0.25), limits = c(-1, 2))
额外优化点:函数外冗余的
df_month_cand <- evolution1 %>% select(...)两行代码没有实际作用,可以直接删除,不影响运行逻辑。
内容的提问来源于stack exchange,提问作者dreamR
相关产品推荐
相关产品推荐

