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

ggplot绘图异常:拟合曲线显示为直线的技术问题求助

疑问:冰淇淋摄入量与游戏时长的回归图表为何只显示直线?

Hey there! I see you're digging into the relationship between ice cream intake and game duration using R, but you're confused why your plots are only showing straight lines—even when you use geom_smooth() without forcing a linear model. Let's break this down step by step.

First, let's recap your analysis code

Here's the R code you're using, formatted for clarity:

# Load and inspect data
sizedata = read.table(file.choose(), header= T, sep =',')
View(sizedata)
summary(sizedata)

# Linear regression model
lm(Icecream ~ Games, sizedata)

# Plotting with ggplot2
library(ggplot2)
# Linear fit (expected to show straight line)
ggplot(sizedata, aes(x=Icecream, y=Games)) + 
  geom_point() + 
  ylim(0,1000) + 
  stat_smooth(method='lm')

# Default smooth fit (you expected a curve, but got a line)
ggplot(sizedata, aes(x=Icecream, y=Games)) + 
  geom_point() + 
  ylim(0,1000) + 
  geom_smooth()

Why you're seeing straight lines

Let's unpack the two plot scenarios:

  1. First plot with stat_smooth(method='lm'): This is totally expected! You're explicitly telling ggplot to fit a linear regression model, so it will always draw a straight line. No issue here.
  2. Second plot with geom_smooth(): By default, geom_smooth() uses a loess (local weighted regression) model to draw a curved line that fits local trends in the data. If you're still seeing a straight line, one of these is likely happening:
    • Your data has a strong linear relationship: If ice cream intake and game duration are actually linearly correlated, loess will just fit a straight line to match that trend.
    • Insufficient data points: Loess needs enough data to detect local trends. If you have fewer than ~10 data points, it can't generate a meaningful curve and will default to a linear fit.
    • Y-axis limits are restricting the fit: Your ylim(0,1000) might be cutting off part of the data or forcing the smooth function to fit within an unnatural range, resulting in a straight line.
    • Data type issues: Double-check that Icecream and Games are numeric columns (not factors or characters). Use str(sizedata) to verify this—non-numeric data will break loess fitting.

Fixes to try

  • Remove the ylim() constraint first: Try plotting without ylim(0,1000) to see if the smooth curve appears. If it does, you can use coord_cartesian(ylim=c(0,1000)) instead—this zooms the plot without truncating the data used for fitting.
  • Adjust the loess span: If you have enough data, tweak the span parameter (controls how "wiggly" the curve is). For example:
    ggplot(sizedata, aes(x=Icecream, y=Games)) + 
      geom_point() + 
      geom_smooth(span=0.4) # Smaller span = more curve; larger span = smoother line
    
  • Inspect your data closely: Run str(sizedata) and plot(sizedata$Icecream, sizedata$Games) to check for outliers, clustered points, or a naturally linear pattern. If you can share a sample of your CSV data (like the first 5-10 rows), we can dig deeper!

内容的提问来源于stack exchange,提问作者katelynn767

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:38:34