画直方图和函数密度曲线的几种方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

画直⽅图和函数密度曲线的⼏种⽅法⽅法⼀:R语⾔
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5,
+ 66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
hist(w, freq = FALSE)
lines(density(w), col = "blue")
x <- 44:76
lines(x, dnorm(x, mean(w), sd(w)), col = "black")
lines(density(w), col = "blue")
density是核密度曲线,⽐正态曲线更拟合
⽅法⼆:
library(ggplot2)
set.seed(1234)
dat <- data.frame(cond = factor(rep(c("A","B"), each=200)),
rating = c(rnorm(200),rnorm(200, mean=.8)))
ggplot(dat, aes(x=rating)) +
geom_histogram(aes(y=..density..), # 这⼀步很重要,使⽤density代替y轴
binwidth=.5,
colour="black", fill="white") +
geom_density(alpha=.2, fill="#FF6666") # 重叠部分采⽤透明设置
⽅法三:echarts
或者⽤echarts-stat画直⽅图或者拟合曲线
⽅法4:excel
注意使⽤⼏个函数
=MAX(A:A)
=MIN(A:A)
=ROUNDUP(SQRT(COUNT(A:A)),0) 分组数
极差/分组数=组距
=FREQUENCY(A:A,K18:K34) 求组内计数,先输⼊⼀⾏公式,再选中所有待计数的单元格,F2,ctrl+shift+enter,搞定=NORMDIST(K18,AVERAGE(A:A),STDEV(A:A),0) 求正态分布的函数密度
插⼊直⽅图,选中直⽅图后,设置数据系列格式
选择组距为0,颜⾊,边框,
选择数据,可以点击编辑,换别的数据,可以添加新的数据,横坐标的label修改的话,选择“⽔平(分类)轴标签”
再插⼀个直⽅图,选中图形,⿏标右键,
别忘了,选中曲线,设置平滑线。

* 附上lines和curve的区别
lines得直接输⼊x,y值;curve可以直接接受函数为输⼊值,例如curve(sin)。

lines默认加载现在的图上,curve默认是新图。

*附上lines和abline的区别
函数lines()其作⽤是在已有图上加线,命令为lines(x,y),其功能相当于plot(x,y,type="1")
函数abline()可以在图上加直线,其使⽤⽅法有四种格式。

(1)abline(a,b)
表⽰画⼀条y=a+bx的直线
(2)abline(h=y)
表⽰画出⼀条过所有点得⽔平直线
(3)abline(v=x)
表⽰画出⼀条过所有点的竖直直线
(4)abline(lm.obj)
表⽰绘出线性模型得到的线性⽅程
lines()函数做的是⼀般连线图,其输⼊是x,y的点向量。

abline()函数做的是回归线,其输⼊是回归模型对象。

plot()函数被调⽤时即创建⼀副新图,⽽lines()函数是在已存在的图形上添加信息,并不能⾃⼰⽣成图形。

*附上如何使⽤R语⾔做正态性检验,数据是否服从正态分布
两种办法
x<-c(39,55,51,47,32,25,34)
shapiro.test(x)
看p值⼤不⼤0.05,越⼤越正态
⽤R语⾔⾃带的Kolmogorov-Smirnov⽅法
ks.test(x, "pnorm", mean = mean(x), sd = sqrt(var(x)))
看p值⼤不⼤0.05,越⼤越正态
或者画⼀个qq图
norm.test<- function(input.data,alpha=0.05,pic=TRUE){
if(pic==TRUE){#画图形
dev.new()
par(mfrow=c(2,1))
qqnorm(input.data,main="qq图")
qqline(input.data)
hist(input.data,frep=F,main="直⽅图和密度估计曲线")
lines(density(input.data),col="blue") #密度估计曲线
x<- c(round(min(input.data)):round(max(input.data)))
lines(x,dnorm(x,mean(input.data),sd(input.data)),col="red") #正态分布曲线
}
sol<- shapiro.test(input.data)
if(sol$p.value>alpha){
print(paste("success:服从正态分布,p.value=",sol$p.value,">",alpha))
}else{
print(paste("error:不服从正态分布,p.value=",sol$p.value,"<=",alpha)) }
sol
}。

相关文档
最新文档