方法一: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是核密度曲線,比正態曲線更擬合
方法二:
參考https://blog.csdn.net/tanzuozhev/article/details/51106291
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
https://echarts.baidu.com/examples/editor.html?c=bar-label-rotation
https://github.com/ecomfe/echarts-stat
或者用echarts-stat畫直方圖或者擬合曲線
方法4:excel
參考https://jingyan.baidu.com/article/f3ad7d0fffa41509c2345b6e.html
注意使用幾個函數
=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
}