直方圖又稱柱狀圖/條形圖宛渐,用來展示連續(xù)數(shù)據(jù)分布的常用工具,用來估計數(shù)據(jù)的概率分布眯搭。
1.利用hist()函數(shù)繪制
使用格式:hist(x,breaks=n,main="name",labels=FASLE,col="blue",border="red",freq=TRUE)
x 向量窥翩,直方圖的數(shù)據(jù);
breaks 描直方圖的斷點,例如breaks=20表示畫出20個柱子;
labels 邏輯變量鳞仙,TRUE標(biāo)出頻數(shù)
main 標(biāo)題
col 顏色
border外框顏色
freq 邏輯變量寇蚊,TRUE為數(shù)據(jù)頻數(shù),默認(rèn)為TRUE棍好;FALSE則為密度
> data(mtcars) #加載數(shù)據(jù)
> head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
hist(mtcars$mpg,breaks=20,labels=TRUE,main="mtcars hist",col="blue",border="red")
hist(mtcars$mpg,labels=TRUE,main="mtcars hist",col="blue",border="red",freq=FALSE)
我們可以用lines畫出數(shù)據(jù)的密度曲線
hist(mtcars$mpg,breaks=20,labels=TRUE,main="mtcars hist",col="blue",border="red",freq=FALSE)
lines(density(mtcars$mpg),col="green",lwd=2)
還可以畫正態(tài)分布的密度曲線
x<-seq(from=min(mtcars$mpg),to=max(mtcars$mpg),by=0.5)
lines(x,dnorm(x,mean(mtcars$mpg),sd(mtcars$mpg)),col="orange",lwd=2)
2.利用ggplot2繪制
1.繪制普通條形圖
使用格式 ggplot(data,aes(x=class))+geom_bar()
x 繪制的數(shù)據(jù)
或者 ggplot(data,aes(y=class))+geom_bar(),則類型分布在y軸
> data(mpg)
> head(mpg)
# A tibble: 6 × 11
manufacturer model displ year cyl trans drv cty hwy fl class
<chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compa…
2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compa…
3 audi a4 2 2008 4 manual(m6) f 20 31 p compa…
4 audi a4 2 2008 4 auto(av) f 21 30 p compa…
5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compa…
6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compa…
g <- ggplot(mpg, aes(x=class)) #直接得出每個class的數(shù)目
g+geom_bar()
g <- ggplot(mpg, aes(y=class)) #
g+geom_bar()
當(dāng)想看在該因素中其他因素的情況脸爱,可以利用fill進行繪制,得出疊堆條形圖
g <- ggplot(mpg, aes(x=class))
g + geom_bar(aes(fill = drv))
#得出每種class中drv的分布情況
橫向的柱狀
ggplot(mpg, aes(y = class)) +
geom_bar(aes(fill = drv), position = position_stack(reverse = TRUE)) +
theme(legend.position = "top") #標(biāo)簽位置
2.多組條形圖
大多數(shù)時候我們想比較多個組直接某些因素的情況丰涉,例如有時候我們要畫幾個樣本中各個細(xì)胞比例的情況
這是我們可以畫堆疊條形圖
#設(shè)置3個樣本
> Sample1<-c(0.1,0.3,0.3,0.2,0.1)
> Sample2<-c(0.1,0.2,0.3,0.3,0.1)
> Sample3<-c(0.3,0.1,0.2,0.3,0.1)
> data<-cbind(Sample1,Sample2,Sample3)
> rownames(data)<-c("CD4_T","CD8_T","Monocyte","B","NK")
> head(data) #大多數(shù)時候數(shù)據(jù)的格式是這樣的
Sample1 Sample2 Sample3
CD4_T 0.1 0.1 0.3
CD8_T 0.3 0.2 0.1
Monocyte 0.3 0.3 0.2
B 0.2 0.3 0.3
NK 0.1 0.1 0.1
#首先我們需要轉(zhuǎn)換數(shù)據(jù)形式
> library(reshape2)
> dat<-melt(data)
> head(dat)
Var1 Var2 value
1 CD4_T Sample1 0.1
2 CD8_T Sample1 0.3
3 Monocyte Sample1 0.3
4 B Sample1 0.2
5 NK Sample1 0.1
6 CD4_T Sample2 0.1
> colnames(dat)<-c("celltype","Sample","proportion")
> head(dat)
celltype Sample proportion
1 CD4_T Sample1 0.1
2 CD8_T Sample1 0.3
3 Monocyte Sample1 0.3
4 B Sample1 0.2
5 NK Sample1 0.1
6 CD4_T Sample2 0.1
dat$proportion<-as.numeric(dat$proportion)
ggplot(dat,aes(x=Sample,y=proportion,fill = celltype))+ #橫坐標(biāo)為樣本,縱坐標(biāo)則為比例
geom_bar(stat= 'identity',position = "stack") #position = "stack"則進行堆疊
#可以調(diào)整x和y將條形進行橫向比較
ggplot(dat,aes(x=proportion,y=Sample,fill = celltype))+
geom_bar(stat= 'identity',position = "stack")
ggplot(dat,aes(x=Sample,y=proportion,fill = celltype))+
geom_bar(stat='identity',position='dodge') #position='dodge') 則不進行堆疊
此時不好比較,我們可以把同類型細(xì)胞放在一塊比較埋凯,即橫坐標(biāo)變?yōu)榧?xì)胞類型
在實驗過程中可以采用容易分析的形式進行比較
ggplot(dat,aes(x=celltype,y=proportion,fill =Sample ))+
geom_bar(stat='identity',position='dodge') #則不進行堆疊
以上是基本繪制的參數(shù),此外還有美化的一些參數(shù)
labs 橫縱坐標(biāo)軸的名稱
ggttitle 標(biāo)題名稱
geom_bar(width= )設(shè)置條形大小,默認(rèn)情況下,設(shè)置為數(shù)據(jù)分辨率的90%蚂蕴。
theme_bw() 改變背景顏色
scale_fill_manual 自定義顏色
更多參數(shù)見R語言繪圖——數(shù)據(jù)可視化ggplot2 介紹和主要的參數(shù)
library(RColorBrewer)
cols<-brewer.pal(8,"YlOrRd")[1:5]
names(cols)<-rownames(data)
head(cols)
CD4_T CD8_T Monocyte B NK
"#FFFFCC" "#FFEDA0" "#FED976" "#FEB24C" "#FD8D3C"
ggplot(dat,aes(x=Sample,y=proportion,fill = celltype))+
geom_bar(stat= 'identity',position = "stack",width=0.2) +
labs(x="Sample ID",y="CellType Proportion")+
ggtitle("Sample Celltype Proportion")+
theme_bw()+
scale_fill_manual(values = cols)