使用R在散点图中添加趋势线

4

我有一个数据集,记录了1846年至2014年期间某个年龄段(0-105岁以上)的人数,我正在制作按年份汇总的散点图;其中男性和女性各有一个数据集。之后,我将添加一条趋势线,但我不知道如何操作。

目前为止,我的进展如下:

B <- as.matrix(read.table("clipboard"))
head(B)
age <- 0:105
y <- 1846:2014
plot(c(1846:2014), c(colSums(B)), col=3, xlab="Year", ylab="Summed age", main="Summed people")

这给了我一个图表,但我不确定如何添加趋势线。请帮忙。 图表看起来像这样:https://www.dropbox.com/s/5dono5bjrmqylcp/Plot.png?dl=0

数据在这里: https://www.ssb.no/statistikkbanken/SelectVarVal/Define.asp?subjectcode=01&ProductId=01&MainTable=FolkemEttAarig&SubTable=1&PLanguage=1&nvl=True&Qid=0&gruppe1=Hele&gruppe2=Hele&gruppe3=Hele&VS1=AlleAldre00B&VS2=Kjonn3&VS3=&mt=0&KortNavnWeb=folkemengde&CMSSubjectArea=befolkning&StatVariant=&checked=true

1个回答

9
我已下载您的数据文件并将其发布在可访问的地方。
urlsrc <- "http://www.math.mcmaster.ca/bolker/misc"
urlfn <- "201512516853914205393FolkemEttAarig.tsv"
d <- read.delim(url(paste(urlsrc,urlfn,sep="/")),header=TRUE,
                check.names=FALSE)
dm <- d[,3:171]
y <- as.numeric(names(dm))

现在开始制作图表:
plot(y, colSums(dm),
           col=3, xlab="Year", ylab="Summed age", main="Summed people")
abline(lm(colSums(dm) ~ y))

在这里输入图片描述

您也可以像这样实现:

library("tidyr")
library("ggplot2"); theme_set(theme_bw())
library("dplyr")
d2 <- gather(dm,year,pop,convert=TRUE)
d3 <- d2 %>% group_by(year) %>% summarise(pop=mean(pop))
ggplot(d3,aes(year,pop)) + geom_point() + 
    geom_smooth(method="lm")

输入图像描述

这条趋势线周围有一个置信区间,但它非常窄,很难看到。

更新:在第二张图中,我无意中使用了平均值而不是总和,但当然可以轻松更改。


1
@BenBolker提供了数据集。我用B <- dm替换了你代码的第一行,并在最后一行添加了abline(lm(colSums(B) ~ y))。结果是散点图和添加的趋势线。你确定你的数据集是正确的吗?换句话说,这对我起作用了。如果你得到了“variable lengths differ”错误,则你的数据框架可能缺少一些数据。 - Steven
现在可以工作了,不过我不确定发生了什么。感谢您的帮助,我非常感激。 - JohnDoe
1
这就是为什么我们喜欢可重复的示例……它会清楚地表明您的数据存在问题(尽管使用tidyr/dplyr/ggplot2版本至少能添加一些价值)。 - Ben Bolker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接