1.2 负基础的R语言学习笔记.绘图篇:绘制折线统计图

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

`1.2 负基础的R语言学习笔记.绘图篇:绘制折线统计图`


前言

以模拟硬币实验为例,本实例要达成以下目标:
抛n次硬币,统计结果。计算正面向上的频率。
重复此试验m次,统计每次试验所得的正面向上的频率pi(i=1,2,3…m)。
画出pi的折线统计图,表示m次试验过程中频率的浮动情况.
最终得出以下结论:
在抛硬币试验中,每次试验中抛硬币的次数n越大,正面向上的频率越容易达到理论频率0.5.
体现在折现统计图中,当n较小时,m次试验后频率波动的幅度越大。当n较大时,频率波动幅度较小(稳定在0.5附近)


一、加载宏包

library(ggplot2)

二、作图过程

x = sample(0:1,10,replace=TRUE); #通过sample()函数,从0和1两个整数中随机抽样,模拟抛硬币的结果,0代表反面,1代表正面. 这条代码中进行了10次抽样.并将结果保存在变量x中.
p = length(x[x==1])/10;         #利用length()函数计算结果中1出现的次数。除以10计算频率,然后保存为变量p。

上面的操作我们要进行100次,并把每次的结果保存下来,接下来将利用循环语句实现这个过程。

M = cbind(seq(1,100,by=1),rep(0,100))   #创建一个100×2的向量用于储存结果。
j = 1 #用于每次循环中指定m的行指标
for (i in 1:100){
	x = sample(0:1,10,replace=TRUE)
	p = length(x[x==1])/10;
 		M[j,2] = p;   #把频率t 保存在矩阵m[j,2]中
		j = j+1  #进行一次循环后行+1
}

运行一次上面代码后,我们就得到了一个矩阵M(100×2),第一列向量是试验次数,第二列向量是每次试验所得的正面向上频率.
在这里插入图片描述

接下来利用ggplot2绘制折线图:

M = as.data.frame(M)  #将矩阵m转换为数据框
f = ggplot(M)+
geom_point(aes(x=M[,1],y=M[,2]))+   # 描点(散点图)
geom_line(aes(x=M[,1],y=M[,2]))+      # 折线图
	geom_line(aes(x=M[,1],y=0.5))   #在图像中间添加一条直线y=0.5作参考.    
print(f)

调整一下x轴和y轴:

f = ggplot(M)+
geom_point(aes(x=M[,1],y=M[,2]))+   # 描点(散点图)
geom_line(aes(x=M[,1],y=M[,2])) +     # 折线图
	geom_line(aes(x=M[,1],y=0.5))   #在图像中间添加一条直线y=0.5作参考.    
	scale_x_continuous( limits=c(1,100),breaks=seq(0,100,by=10) )+ #x轴刻度
   scale_y_continuous( limits=c(0,1),  breaks=seq(0,1,by=0.25) )#y轴刻度
print(f)

完整代码:

library(ggplot2)
M = cbind(seq(1,100,by=1),rep(0,100))   #创建一个100×2的向量用于储存结果。
j = 1 #用于每次循环中指定m的行指标
for (i in 1:100){
x = sample(0:1,10,replace=TRUE)
p = length(x[x==1])/10;
 		M[j,2] = p;   #把频率t 保存在矩阵m[j,2]中
		j = j+1  #进行一次循环后行+1
}
M = as.data.frame(M)  #将矩阵m转换为数据框
f = ggplot(M)+
geom_point(aes(x=M[,1],y=M[,2]))+   # 描点(散点图)
geom_line(aes(x=M[,1],y=M[,2])) +     # 折线图
	geom_line(aes(x=M[,1],y=0.5)) +  #在图像中间添加一条直线y=0.5作参考.    
	scale_x_continuous( limits=c(1,100),breaks=seq(0,100,by=10) )+ #x轴刻度
   scale_y_continuous( limits=c(0,1),  breaks=seq(0,1,by=0.25) ) #y轴刻度
print(f)

绘图结果:
在这里插入图片描述

修改相关参数,更改每次试验抛硬币次数为100,再进行100次试验。

library(ggplot2)
M = cbind(seq(1,100,by=1),rep(0,100))   #创建一个100×2的向量用于储存结果。
j = 1 #用于每次循环中指定m的行指标
for (i in 1:100){
x = sample(0:1,100,replace=TRUE)
p = length(x[x==1])/100;
 		M[j,2] = p;   #把频率t 保存在矩阵m[j,2]中
		j = j+1  #进行一次循环后行+1
}
M = as.data.frame(M)  #将矩阵m转换为数据框
f = ggplot(M)+
geom_point(aes(x=M[,1],y=M[,2]))+   # 描点(散点图)
geom_line(aes(x=M[,1],y=M[,2])) +     # 折线图
	geom_line(aes(x=M[,1],y=0.5)) +  #在图像中间添加一条直线y=0.5作参考.    
	scale_x_continuous( limits=c(1,100),breaks=seq(0,100,by=10) )+ #x轴刻度
    scale_y_continuous( limits=c(0,1),  breaks=seq(0,1,by=0.25) ) #y轴刻度
print(f)

结果:
在这里插入图片描述

可以看到,每次抛100次硬币时,频率更容易稳定在0.5附近.

代码改进

为了方便设置参数。可在代码前面设置变量的值,在后面的代码中引用变量.

library(ggplot2)
n = 100;   #每次试验抛硬币次数
m = 100;   #试验次数
M = cbind(seq(1,m,by=1),rep(0,m))   #创建一个m×2的向量用于储存结果。
j = 1 #用于每次循环中指定m的行指标
for (i in 1:m){
x = sample(0:1,n,replace=TRUE)
p = length(x[x==1])/n;
 		M[j,2] = p;   #把频率t 保存在矩阵m[j,2]中
		j = j+1  #进行一次循环后行+1
}
M = as.data.frame(M)  #将矩阵m转换为数据框
f = ggplot(M)+
geom_point(aes(x=M[,1],y=M[,2]))+   # 描点(散点图)
geom_line(aes(x=M[,1],y=M[,2])) +     # 折线图
geom_line(aes(x=M[,1],y=0.5)) +  #在图像中间添加一条直线y=0.5作参考.    
scale_x_continuous( limits=c(1,m),breaks=seq(0,m,by=10) )+ #x轴刻度
scale_y_continuous( limits=c(0,1),  breaks=seq(0,1,by=0.25) ) #y轴刻度
print(f)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值