使用循环函数批量绘制多列数据图表的问题求助(ggplot2)
问题原因
你的代码里y="i"是把字符串"i"当成了Y轴的固定值,所有数据点的Y值都一样,所以图表才会呈现直线,根本没用到对应列的浓度值。
修正后的代码
方法1:用.data代词(推荐,适配ggplot2现代语法)
library(ggplot2) # 剔除第一列,获取所有要作为Y轴的列名 col_names <- colnames(rotated.plot.data)[-1] for(i in col_names){ plot <- ggplot(rotated.plot.data, aes(x = instrument.supersaturation, y = .data[[i]])) + geom_point() + labs(y = i) # 给每个图表的Y轴加上对应列名,方便识别 print(plot) }
方法2:用aes_string(兼容旧版ggplot2)
library(ggplot2) col_names <- colnames(rotated.plot.data)[-1] for(i in col_names){ plot <- ggplot(rotated.plot.data, aes_string(x = "instrument.supersaturation", y = i)) + geom_point() + labs(y = i) print(plot) }
关键说明
.data[[i]]能动态引用数据框里列名为i的列,让ggplot正确读取对应列的浓度值。- 加
labs(y = i)是为了每个图表的Y轴都显示对应的列名,避免所有图表Y轴标签一致,方便区分不同图表对应的指标。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

