经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » R语言 » 查看文章
R语言绘制带误差线的条形图
来源:jb51  时间:2022/6/27 12:53:52  对本文有异议

条形统计图是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条.带误差的条形图可以通过误差线来判断显著性。

在这里插入图片描述

继续使用我们的汽车销售数据(公众号回复:汽车销售,可以获得该数据)来演示,先导入数据

  1. library(foreign)
  2. library(ggplot2)
  3. library(tidyverse)
  4. bc <- read.spss("E:/r/test/tree_car.sav",
  5. use.value.labels=F, to.data.frame=T)
  6. names(bc)

在这里插入图片描述

我们来看下数据,car就是汽车售价,age是年龄,gender是性别,inccat是收入,这里分成4个等级,ed是教育程度。
假设我们想知道不同教育水平的男女在买汽车的价格上有什么不同,可绘制带误差和可信区间的折线图,关键就是要算出它的标准误se和95%ci.
我们先生成一个计算标准误se和95%ci的自定义函数,这是国外一位大佬设计的函数,我见好用直接搬运过来了。

  1. summarySE <- function(data=NULL, measurevar, groupvars=NULL, na.rm=FALSE,
  2. conf.interval=.95, .drop=TRUE) {
  3. library(plyr)
  4. # New version of length which can handle NA's: if na.rm==T, don't count them
  5. length2 <- function (x, na.rm=FALSE) {
  6. if (na.rm) sum(!is.na(x))
  7. else length(x)
  8. }
  9. # This does the summary. For each group's data frame, return a vector with
  10. # N, mean, and sd
  11. datac <- ddply(data, groupvars, .drop=.drop,
  12. .fun = function(xx, col) {
  13. c(N = length2(xx[[col]], na.rm=na.rm),
  14. mean = mean (xx[[col]], na.rm=na.rm),
  15. sd = sd (xx[[col]], na.rm=na.rm)
  16. )
  17. },
  18. measurevar
  19. )
  20. # Rename the "mean" column
  21. datac <- rename(datac, c("mean" = measurevar))
  22. datac$se <- datac$sd / sqrt(datac$N) # Calculate standard error of the mean
  23. # Confidence interval multiplier for standard error
  24. # Calculate t-statistic for confidence interval:
  25. # e.g., if conf.interval is .95, use .975 (above/below), and use df=N-1
  26. ciMult <- qt(conf.interval/2 + .5, datac$N-1)
  27. datac$ci <- datac$se * ciMult
  28. return(datac)
  29. }

生成函数后,我们使用自定义函数summarySE生成标准误se和95%ci. Measurevar填入你要衡量比较的指标,这里填入汽车售价,groupvars这里填入性别和教育程度。

  1. carss<- summarySE(bc, measurevar="car", groupvars=c("gender","ed"))

生成了我们需要的做图数据

在这里插入图片描述

画条形图和画折线图不同的是,教育这个指标我们要转换成分类变量

  1. carss$ed <- factor(carss$ed)

转换好以后就可以做图了,先做一个带误差线的

  1. ggplot(carss, aes(x=ed, y=car, fill=gender)) +
  2. geom_bar(position=position_dodge(), stat="identity") +
  3. geom_errorbar(aes(ymin=car-se, ymax=car+se),
  4. width=.2, # Width of the error bars
  5. position=position_dodge(.9))

在这里插入图片描述

画个带置信区间的

  1. ggplot(carss, aes(x=ed, y=car, fill=gender)) +
  2. geom_bar(position=position_dodge(), stat="identity") +
  3. geom_errorbar(aes(ymin=car-ci, ymax=car+ci),
  4. width=.2, # Width of the error bars
  5. position=position_dodge(.9))

在这里插入图片描述

进行美化一下,一个可以用于发表的图就做成了

在这里插入图片描述

如何利用置信区间来判断显著性

在这里插入图片描述

在这里插入图片描述

到此这篇关于R语言绘制带误差线的条形图的文章就介绍到这了,更多相关R语言 带误差线条形图内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号