You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:24:04