R語言基礎繪圖系統
基礎圖形——條形圖、誤差圖
3.條形圖
barplot接收的數據是矩陣而非數據框。
data <- sample(c(50:80),5)
barplot(data,col=heat.colors(5))
my_matrix <- matrix(data=sample(10:40,9),
nrow = 3,
dimnames = list(c('A',"B",'C'),
paste('dose',1:3)))
barplot(t(my_matrix),
beside = T, #是否平行放置,F為堆棧
col = c('deeppink1','forestgreen','gray'))
更多參數用法。
par(mfrow=c(2,2))
average_gdp <- c(6500,8000,13000,9200)
country <- c('China',"Korea",'Japan',"Singapore")
barplot(average_gdp,
names.arg = country, #為條柱添加標簽
horiz = F, #是否水平放置
width = c(0.5,0.6,0.8,1.0), #條柱寬度
space = 1.2) #條柱間距
4.誤差條圖
沒有直接可用的函數來繪制誤差條圖。
# 誤差條圖
set.seed(2017)
data <- data.frame(doseA=rnorm(100,10,2),
doseB=rnorm(100,13,5),
doseC=rnorm(100,8,3))
data_mean <- apply(data,2,mean)
data_sd <- apply(data,2,sd) #標准差
barcenters <- barplot(data_mean,names.arg = names(data_mean),
ylim=c(0,20))
#存入對象中,保存的是條柱中心位置的橫坐標
#以下兩個都是低級繪圖函數,前4個參數是起始點和終止點坐標
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)#水平箭頭,code兩端都繪制箭頭
自定義函數來繪制誤差條圖。
#均值和標准差是繪制誤差條的基本元素
A=c(rep('drug A',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)
#標准差計算
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
#定義函數
error.bar <- function(x,y,upper,lower=upper,length=0.1,...){
arrows(x,y+upper,x,y-lower,angle = 90,code=3,
length = length,...)
}
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)