R ggplot2绘制常规y轴双折线图刻度、连线异常如何解决
R ggplot2双折线图绘制异常修正
问题根因
当前代码输出图表异常,由两个核心错误导致:
- 数据类型不匹配:
ROC_twenty_year列的数值使用逗号作为小数分隔符,R读取时会默认将该列识别为字符/因子类型,而非数值型,因此y轴会按照文本字典序排列刻度,完全不符合数值轴的大小排序逻辑。 - 分组映射错误:代码中硬编码
group = 1,强制将所有观测值归为同一分组,因此所有数据点会被连成一条杂乱的折线,无法按Amendment字段拆分出GW(ten)和GW(one)两个分组的独立折线。 - 冗余代码问题:代码中先后叠加
theme_minimal()和theme_bw(),前者会被后者完全覆盖,属于无效设置。
修正后可运行代码
library(ggplot2) # 注:原代码加载的reshape2、plyr、gridExtra包本次绘图未使用,可按需保留 # -------------- 数据处理部分 -------------- # 如果是手动构造数据集,直接使用数值型(点号作为小数分隔符)即可 data <- data.frame( Amendment = rep(c("GW(ten)", "GW(one)"), each = 20), Feldjahre = rep(1:20, 2), ROC_twenty_year = c( 100,53.53,147.42,96.43,186.26,131.60,218.10,160.43,244.21,184.07,265.61,203.44,283.15,219.33,297.53,232.35,309.32,243.02,318.99,251.77, 100,53.53,47.42,42.90,38.84,35.17,31.84,28.83,26.10,23.64,21.40,19.38,17.54,15.88,14.38,13.02,11.79,10.67,9.67,8.75 ) ) # 如果是从外部csv/文本文件读入的原始数据,不需要手动重构,运行下面这行转换类型即可 # data$ROC_twenty_year <- as.numeric(gsub(",", ".", data$ROC_twenty_year)) # -------------- 绘图部分 -------------- ggplot(data=data, aes(x = Feldjahre, y = ROC_twenty_year, group = Amendment, color = Amendment)) + geom_line(size = 1, alpha = 0.8) + geom_point(size = 3) + scale_x_continuous(breaks = 1:20) + labs(x = "Feldjahre", y = "ROC_twenty_year", color = "Amendment分组") + theme_bw(base_size = 16)
修正逻辑说明
- 数据预处理阶段将
ROC_twenty_year列的逗号小数分隔符替换为R可识别的点号,再转换为数值类型,y轴即可按照数值大小正常生成线性刻度。 - 美学映射中将
group、color均绑定到Amendment字段,既可以让ggplot按分组分别绘制折线,也可以通过颜色直接区分两个分组的序列。 - 移除冗余的主题设置,补充了x轴刻度和图例标签,提升图表可读性。
内容的提问来源于stack exchange,提问作者Shohnazar Hazratqulov
相关产品推荐
相关产品推荐

