通过一个综合的例子测试绘图函数
学习的内容是tigerfish老师的教程。
第一节:基本知识
用seq函数产生100位学生的学号。
> num = seq(,)
> num
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
用runif函数产生100个随机数(随机数是小数),代表课程1的成绩,100个数字,最小值50,最大值100。
该结果是均匀分布,用round函数对其取整。
> x1 = round(runif(100,min=50,max=100));
> x1
[1] 85 68 69 92 76 67 90 82 98 68 98 68 80 74 75 90 78 52 55 75 91 63 99 89 93 85 65
[28] 79 55 89 98 83 56 73 75 56 90 70 82 68 62 90 78 83 81 95 63 98 79 89 59 56 60 69
[55] 68 93 85 65 64 68 73 97 86 88 93 71 65 71 82 70 63 76 60 97 92 78 99 54 50 79 74
[82] 85 58 92 80 64 50 64 95 83 91 73 87 79 85 85 67 51 70 93
用rnorm函数产生正态分布数字,代表课程2的成绩,平均值是80,标准差是7。再用round函数对其取整。
> x2 = round(rnorm(,mean=,sd=))
> x2
[]
[]
[]
[]
用rnorm函数产生正态分布数字,代表课程3的成绩,平均值是90,标准差是14。再用round函数对其取整。
> x3 = round(rnorm(,mean=,sd=))
> x3
[]
[]
[]
[]
[]
从上面可以看到一些数字大于100,为了使得每个数字都小于等于100,使用which方法对x3进行修改,将超过100的修改为100。
> x3[which(x3>)]=
> x3
[]
[]
[]
[]
[]
将上面4个向量放到组合为数据框data.frame。
> x = data.frame(num,x1,x2,x3)
> x
num x1 x2 x3
计算每门课的平均分
> colMeans(x[:])
x1 x2 x3
76.74 80.49 86.26
> colMeans(x)[c('x1','x2','x3')]
x1 x2 x3
76.74 80.49 86.26
使用apply函数也可以实现,参数2表示对列进行计算
> apply(x,,mean)
num x1 x2 x3
201321050.50 76.74 80.49 86.26
计算最大值,最小值。
> apply(x,,min)
num x1 x2 x3
> apply(x,,max)
num x1 x2 x3
计算总分
> apply(x[c('x1','x2','x3')],,sum)
[]
[]
[]
[]
[]
计算总分最高的人的序号。
> which.max(apply(x[c('x1','x2','x3')],,sum))
[]
计算最高分的学号。
> x$num[which.max(apply(x[c('x1','x2','x3')],,sum))]
[]
第二节:绘图基本函数
绘制直方图函数hist
对课程1绘制直方图,横坐标表示分数区间,纵坐标表示频次。
> hist(x$x1)
对课程1和课程2绘制散点图,plot函数。通过该图可以大致看出两门课是否存在相关关系。
> plot(x$x1,x$x2)
列联函数table,对每个数据进行统计。
柱状图绘制函数barplot对统计结果进行绘制。barplot必须和table函数结合使用才有意义。
> table(x$x2) > barplot(table(x$x2))
饼图函数pie。pie也需要和table函数结合使用。
> pie(table(x$x2))
箱线图boxplot,对三门课程画箱线图。
> boxplot(x$x1,x$x2,x$x3)
指定箱线图的颜色
> boxplot(x[:],col=c('red','green','blue'))
使用horizontal=T将箱线图水平放置
> boxplot(x[:],col=c('red','green','blue'),horizontal=T)
对每个人画雷达图。雷达图可以给出比较直观的感觉。
> stars(x[:])
对雷达图进行颜色和样式的修改。使用draw.segments=T画扇形。
> stars(x[:],draw.segments=T)
茎叶图
> stem(x$x1) The decimal point is digit(s) to the right of the | |
|
|
|
|
|
|
|
|
|
散点图的参数设置
plot(x$x1,x$x2,
main='课程1与课程2的关系', #设置标题
xlab='课程1',#设置横坐标名称,如果不写则默认为该变量的名称
ylab='课程2',#设置纵坐标名称
xlim=c(,),#设置横坐标的范围
ylim=c(,),#设置纵坐标的范围
xaxs='r',#xaxs='r', yaxs='i':分别设定 x 和y 轴的形式。 "i"(内部)与 "r"(预设值) 形式的刻度都会依照资料的范围而自动调整,但是 "r" 形式的刻度会在刻度范围两边留一些空隙。
yaxs='r',
col='red',#设置点的颜色
pch= #设置画图的样式,20表示为圆点
)
关于点的样式,上面显示用的是编号为20的样式,那么R其实提供了很多样式供使用,如下图。参考R语言绘图符号
用plot画各种形式的图
plot默认情况下画点,但是还有很多不同的形式,用type来控制。下面是不同的画法代表不同的意思。
type 图形样式类型,有九种可能的取值,分别代表不同的样式:参考
- 'p' 画点;
- 'l' 画线;
a=c(,,,,);
b=c(,,,,);
plot(a,b,type='b',col='red')
- 'b' 同时画点和线,但点线不相交;
> plot(a,b,type='b',col='red')
- 'c' 将type = 'b'中的点去掉,只剩下相应的线条部分;
> plot(a,b,type='c',col='red')
- 'o' 同时画点和线,且相互重叠,这是它与type = 'b'的区别;
> plot(a,b,type='o',col='red',pch=)
- 'h' 画铅垂线;
> plot(a,b,type='h',col='red')
- 's' 画阶梯线,从一点到下一点时,先画水平线,再画垂直线;
plot(a,b,type='s',col='red')
- 'S' 也是画阶梯线,但从一点到下一点是先画垂直线,再画水平线;
> plot(a,b,type='S',col='red')
- 'n' 作一幅空图,没有任何内容,但坐标轴、标题等其它元素都照样显示(除非用别的设置特意隐藏了)。
> plot(a,b,type='n',col='red')
在一个图上画多个线
构建一个数据框
> a
a1 a2 a3
画图,lines函数只能在别的图形上面画图,即必须以别的图作为基础,不能自己单独画图。
plot(a$a1,#先画a1
type='l',#画曲线
ylim=c(,),#设置纵坐标范围
main='画多个曲线',#设置图表标题
lwd=, #设置线宽度为2,默认为1
col='red'#设置颜色
) #在上图的基础上进一步画图
lines(a$a2,type='l',col='blue',lwd=)#画a2的曲线图
lines(a$a3,type='l',col='green',lwd=)#画a2的曲线图