楼主: casey_c
9375 5

[程序分享] 用 ggplot2 绘制概率分布图 [推广有奖]

  • 0关注
  • 10粉丝

博士生

92%

还不是VIP/贵宾

-

威望
0
论坛币
96 个
通用积分
2.1003
学术水平
2 点
热心指数
15 点
信用等级
2 点
经验
11502 点
帖子
278
精华
0
在线时间
94 小时
注册时间
2016-11-22
最后登录
2022-5-2

楼主
casey_c 发表于 2016-11-22 11:47:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
扫盲贴,啊哈哈~
在R中,该如何绘制一组数据的概率分布图像呢?用下面这个数据举例说明:
  1. et.seed(1234)
  2. dat <- data.frame(cond = factor(rep(c("A","B"), each=200)),
  3.                        rating = c(rnorm(200),rnorm(200, mean=.8)))
  4. # 简单看一下数据的前几行 View first few rows
  5. head(dat)
  6. #>   cond     rating
  7. #> 1    A -1.2070657
  8. #> 2    A  0.2774292
  9. #> 3    A  1.0844412
  10. #> 4    A -2.3456977
  11. #> 5    A  0.4291247
  12. #> 6    A  0.5060559
  13.    
  14. library(ggplot2)
复制代码
1.png
1、直方图与密度图

函数qplot有着与函数ggplot类似的绘图功能,但相比之下,其语法更为简单。然而有时候我们在实际使用中会觉得ggplot更好上手,因为在qplot里,对参数的使用常常更为复杂。

  1. ## 根据变量"rating"作传统的直方图,窗宽为0.5
  2. ggplot(dat, aes(x=rating)) + geom_histogram(binwidth=.5)
  3. ## 下面这行代码也能达到同样的效果:
  4. # qplot(dat$rating, binwidth=.5)
  5.    
  6. # 白色填充,黑色轮廓
  7. ggplot(dat, aes(x=rating)) +
  8.     geom_histogram(binwidth=.5, colour="black", fill="white")
  9.    
  10. # 密度曲线
  11. ggplot(dat, aes(x=rating)) + geom_density()
  12.    
  13. # 带核密度曲线的概率分布直方图
  14. ggplot(dat, aes(x=rating)) +
  15.     geom_histogram(aes(y=..density..),      # y轴刻度对应的为概率密度而非计数
  16.                     binwidth=.5,
  17.                     colour="black", fill="white") +
  18.     geom_density(alpha=.2, fill="#FF6666")  # 设置附加半透明的密度图
复制代码

2.png

3.png 4.png 5.png

添加均值线:

  1. ggplot(dat, aes(x=rating)) +
  2.         geom_histogram(binwidth=.5, colour="black", fill="white") +
  3.         geom_vline(aes(xintercept=mean(rating, na.rm=T)),   # Ignore NA values for mean
  4.                    color="red", linetype="dashed", size=1)
复制代码

6.png

2、多组数据的直方图与密度图
  1. # 叠加直方图
  2. ggplot(dat, aes(x=rating, fill=cond)) +
  3.     geom_histogram(binwidth=.5, alpha=.5, position="identity")
  4.    
  5. # 交错直方图
  6. ggplot(dat, aes(x=rating, fill=cond)) +
  7.     geom_histogram(binwidth=.5, position="dodge")
  8.    
  9. # 密度图
  10. ggplot(dat, aes(x=rating, colour=cond)) + geom_density()
  11.    
  12. # 带半透明填充的密度图
  13. ggplot(dat, aes(x=rating, fill=cond)) + geom_density(alpha=.3)
复制代码
7.png 8.png 9.png 10.png
在有多组数据的情况下,添加均值时我们需要先构建一个单独的均值数据框:
  1. # 找到每组数据的均值
  2. library(plyr)
  3. cdat <- ddply(dat, "cond", summarise, rating.mean=mean(rating))
  4. cdat
  5. #>   cond rating.mean
  6. #> 1    A -0.05775928
  7. #> 2    B  0.87324927
  8.    
  9. # 带均值线的叠加直方图
  10. ggplot(dat, aes(x=rating, fill=cond)) +
  11.     geom_histogram(binwidth=.5, alpha=.5, position="identity") +
  12.     geom_vline(data=cdat, aes(xintercept=rating.mean,  colour=cond),
  13.                 linetype="dashed", size=1)
  14.    
  15. # 带均值线的密度图
  16. ggplot(dat, aes(x=rating, colour=cond)) +
  17.     geom_density() +
  18.     geom_vline(data=cdat, aes(xintercept=rating.mean,  colour=cond),
  19.                 linetype="dashed", size=1)
复制代码
11.png
12.png 13.png
本内容转自数析学院,原文后面还有画布分区和箱线图的绘制。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:ggplot2 gplot 概率分布 plot GPL 分布图

已有 1 人评分经验 热心指数 收起 理由
飞天玄舞6 + 10 + 2 精彩帖子

总评分: 经验 + 10  热心指数 + 2   查看全部评分

沙发
飞天玄舞6 在职认证  发表于 2016-11-22 15:50:09
内容不错!

藤椅
pkl 在职认证  发表于 2016-11-22 17:20:31
很好的资料,学习了,感谢楼主分享!

板凳
lxy444 学生认证  发表于 2016-11-22 21:45:53
感谢楼主的分享     

报纸
casey_c 发表于 2016-11-25 10:20:14

地板
marscaocn 在职认证  企业认证  学生认证  发表于 2019-2-15 21:04:19
非常不错

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-20 19:42