ggplot绘制散点图时913、995数值异常偏右问题求助
问题原因
你出现这个异常的核心原因是数据框构造方式错误:
- 你使用
cbind()拼接包含字符型(gender列)和数值型的向量时,cbind()会强制将所有列转为字符型,后续转成数据框后,rate字段也变成了字符类型。 - ggplot将字符类型的字段映射为x轴时,会默认按字典序排序,字典序中
"9"开头的字符串远大于"1"开头的字符串,因此数值更小的913、995反而排在了x轴最右侧。 - 额外隐藏问题:你构造的4个向量长度不一致,subject、rate是19个元素,gender、mass只有16个元素,R会自动循环补齐短向量,导致数据匹配错误。
解决方法
直接使用data.frame()构造数据集,不要用cbind()转数据框,data.frame()会自动保留各列的原始数据类型,同时提前对齐所有向量的长度,修正后的代码如下:
library(tidyverse) # 对齐所有向量长度为16条(可根据你的实际数据调整长度) subject = c(1:16) gender = c("M","M","F","F","F","F","M","F","F","M","F","F","F","F","M","M") mass = c(62.0, 62.9, 36.1, 54.6, 48.5, 42.0, 47.4, 50.6, 42.0, 48.7, 40.3, 34.5, 51.1, 41.2, 51.9, 46.9) rate = c(1792, 1666,995, 1425, 1396, 1418, 1362, 1502, 1256, 1614, 1189, 913, 1460, 1124, 1052, 1347) # 直接构造数据框,保留各列原始类型 bmr = data.frame(subject, gender, mass, rate) ggplot(data = bmr, aes(x = rate, y = mass)) + geom_point(size=3) + geom_smooth(method=lm, se=FALSE)
修改后rate为数值类型,ggplot会按数值大小排序x轴,913、995两个点就会正常显示在x轴左侧。
内容的提问来源于stack exchange,提问作者Christian Benitez
相关产品推荐
相关产品推荐

