既往“缤纷灿烂R语言(R语言高阶课程)”推文
1.R语言作图!R语言作图!R语言作图!说三遍!!| 【缤纷灿烂R语言】| R语言高阶课程
2.基础包中的降龙十八掌:par函数详解(上)| 【缤纷灿烂R语言】| R语言高阶课程
3.par函数详解(下)| 缤纷灿烂R语言 | 医学方R语言高阶课程
4.如何用R语言画出漂亮的盒形图(上)| 缤纷灿烂R语言 | 医学方R语言高阶课程
1
条形图的应用比较广泛,但是也仅仅用于初期数据的探索,如果需要进行数据呈现,恐怕还是需要进行一些花样翻新。闲话不说,直接上函数。
barplot(height,width = 1, space = NULL,
names.arg= NULL, legend.text = NULL, beside = FALSE,
horiz= FALSE, density = NULL, angle = 45,
col= NULL, border = par("fg"),
main= NULL, sub = NULL, xlab = NULL, ylab = NULL,
xlim= NULL, ylim = NULL, xpd = TRUE, log = "",
axes= TRUE, axisnames = TRUE,
cex.axis= par("cex.axis"), cex.names = par("cex.axis"),
inside= TRUE, plot = TRUE, axis.lty = 0, offset = 0,
add= FALSE, args.legend = NULL, ...)
重要参数解释:
height:顾名思义,它指定了条形的高度,这个参数接受一个数值向量或者一个数值矩阵;具体情形还是直接看图说话。如图1-2-3-1、1-2-3-2.
data<- sample(c(50:80),5)
#生成五个50-80之间的随机数
barplot(data,col= heat.colors(5))
#将这五个随机数作为一个数值向量传入barplot()函数
图1-2-3-1
my_matrix<- matrix(data = sample(10:40,9), nrow = 3,dimnames =list(c('A','B','C'),paste('dose',1:3)))
#生成一个矩阵,三行三列,行名称是A、B、C,列名是‘dose1’,‘dose2’,‘dose3’。我们假设这个矩阵表示的是三种药物AB C,在三种不同剂量下的疗效。
barplot(t(my_matrix),beside = TRUE, col = rainbow(3))
#t()是转置函数,转置是线性代数的内容,简单来说,就是将矩阵的行列进行互换。beside参数表示是否将条柱平行放置,若为FALSE,则堆栈放置。
图1-2-3-2
同样的问题是,这个图缺少一个图例。如果你在barplot()中添加一个legend=TRUE的参数,R会自动给出一个图例,但是……我就不说了,你自己去试试看吧,这个时候,你就会认识到legend函数是多么的重要了。
width:条柱的宽度,默认是1.
space:条柱之间的间隔。
names.arg: 设置条形图的标签,即自定义每个条带的名称。
horiz:逻辑参数,是否使用水平条柱。
plot: 逻辑参数,是否画图。
add:逻辑参数,是否将条形图添加到现有的图形上。
下面的代码展示了上述一些参数的用法:
par(mfrow=c(2,2))
average_gdp<- c(6500,8000,13000,9200)
country<- c('China','Korea','Japan','Singapore')
barplot(average_gdp,names.arg = country)
barplot(average_gdp,names.arg = country, horiz = TRUE)
barplot(average_gdp,names.arg = country, horiz = FALSE, width = 0.5)
barplot(average_gdp,names.arg = country, horiz = FALSE, space = 1.2)
图1-2-3-3
在我们的印象中,条形图仅有一个光秃秃的条柱似乎不太能说明问题,因此,加上一个errorbar似乎很有必要。但是,基础绘图包中,没有专门的函数进行误差条图的绘制,必须手动操作。
data(iris)
data_mean<- apply(iris[,1:3],2,mean)#生成均数
data_sd<- apply(iris[,1:3],2,sd)#生成标准差
barcenters<- barplot(data_mean,names.arg = names(data_mean),ylim =c(0,8),main = 'ugly')
#将barplot()存入一个对象中,这个对象保存的是条柱的中心位置的横坐标,不信,你可以在控制栏中键入barcenters试试看。
segments(barcenters,data_mean-data_sd,barcenters,data_mean+data_sd,lty= 1.2)
arrows(barcenters,data_mean-data_sd,barcenters,data_mean+data_sd,code= 3,angle = 90)
#运用segments()和arrows(),两个低级绘图函数,这两个函数都接受x0,y0,x1,y1四个数值,注意,不是数值向量,分别表示起始点和终止点的坐标。arrows(),顾名思义,添加箭头的函数,但是呢,里面有个参数,angle,角度,当设置为90度时,就变成水平的箭头了,code表示箭头的格式,此处code=3,表示绘制两端的箭头。
图1-2-3-4
除此之外,我们也可以自定义一个函数,来添加errorbar。(图1-2-3-5)
A=c(rep("drugA" , 10) , rep("drug B" , 10) )
B=rnorm(20,10,4)
C=rnorm(20,8,3)
D=rnorm(20,5,4)
data=data.frame(A,B,C,D)
colnames(data)=c("treatment","dose_1","dose_2","dose_3")
bilan=aggregate(cbind(dose_1,dose_2, dose_3)~treatment , data=data , mean)
rownames(bilan)=bilan[,1]
bilan=as.matrix(bilan[,-1])
lim=1.2*max(bilan)
ze_barplot= barplot(bilan , beside=T , legend.text=T , col=c("blue" ,"skyblue") , ylim=c(0,lim))
error.bar<- function(x, y, upper, lower=upper, length=0.1,...){
arrows(x,y+ upper, x, y-lower, angle=90, code=3, length=length, ...)
}
stdev=aggregate(cbind(dose_1,dose_2,dose_3)~treatment, data=data , sd)
rownames(stdev)=stdev[,1]
stdev=as.matrix(stdev[,-1])* 1.96 / 10
ze_barplot= barplot(bilan , beside=T , legend.text=T,col=c("blue" ,"skyblue") , ylim=c(0,lim) , ylab="height")
error.bar(ze_barplot,bilan,stdev)
#代码其实很好理解,如果看不懂,建议去学一些aggregate()函数,非常实用的汇总函数。
图1-2-3-5
好了,关于条形图就介绍这么多,推文中的代码请大家多多练习,如果需要完整代码,请联系小编(微信号:yixuefang1234)哦~下期我们介绍直方图!seeyou~
“医学方”已经推出“一本R书走天涯”R语言入门与数据清洗视频课程了哦~
有需要的粉丝可以登录以下链接
https://ke.qq.com/course/188957#tuin=9fb73503
医学方已推出“国自然基金申请”“临床数据挖掘”、“基因数据挖掘”、“R语言教程”、“医学统计学”、“微创动物实验培训”等多个专题课程,如需了解课程详细推文,可关注“医学方”公众号,点击“精品专题”进入
想了解“医学方”最新视频课程动态?可登陆腾讯课堂或网易云课堂收看
目前已有课程:
(1)医学方|医学统计学公开课|石小白老师教您轻松学统计(公益免费课程)
(2)医学方|医学数据挖掘精品课程|豪斯医生手把手教您如何数据挖掘
(3) 医学方|R语言快速入门与数据清洗|一本R书走天涯系列课程
网易云课堂:http://study.163.com/u/ykt1467466791112
客服电话:15821255568
客服微信:yixuefang1234
温馨提示:医学方还设有专门的讨论群哦~各位明星导师都在群中,可以解答各位的遇到的问题,如有兴趣,可以加客服微信后加入群聊~
微信公众号:
如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈。您的支持和鼓励是我们最大的动力。喜欢就请关注我们吧~
长按二维码
关注我们