R語言繪圖——條形圖/柱狀圖

直方圖又稱柱狀圖/條形圖,用來展示連續(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標出頻數(shù)
main 標題
col 顏色
border外框顏色
freq 邏輯變量,TRUE為數(shù)據(jù)頻數(shù),默認為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")

image.png
hist(mtcars$mpg,labels=TRUE,main="mtcars hist",col="blue",border="red",freq=FALSE)
image.png

我們可以用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)
image.png

還可以畫正態(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)
image.png

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()
image.png
g <- ggplot(mpg, aes(y=class))  #
g+geom_bar()
image.png

當想看在該因素中其他因素的情況,可以利用fill進行繪制,得出疊堆條形圖

g <- ggplot(mpg, aes(x=class))
g + geom_bar(aes(fill = drv))
#得出每種class中drv的分布情況
image.png

橫向的柱狀

ggplot(mpg, aes(y = class)) +
 geom_bar(aes(fill = drv), position = position_stack(reverse = TRUE)) +
 theme(legend.position = "top") #標簽位置
#

2.多組條形圖

大多數(shù)時候我們想比較多個組直接某些因素的情況,例如有時候我們要畫幾個樣本中各個細胞比例的情況
這是我們可以畫堆疊條形圖

#設(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))+  #橫坐標為樣本,縱坐標則為比例
       geom_bar(stat= 'identity',position = "stack")  #position = "stack"則進行堆疊
image.png
#可以調(diào)整x和y將條形進行橫向比較
ggplot(dat,aes(x=proportion,y=Sample,fill = celltype))+ 
       geom_bar(stat= 'identity',position = "stack")  
image.png
ggplot(dat,aes(x=Sample,y=proportion,fill = celltype))+ 
geom_bar(stat='identity',position='dodge')   #position='dodge') 則不進行堆疊
image.png

此時不好比較,我們可以把同類型細胞放在一塊比較,即橫坐標變?yōu)榧毎愋?br> 在實驗過程中可以采用容易分析的形式進行比較

ggplot(dat,aes(x=celltype,y=proportion,fill =Sample ))+ 
geom_bar(stat='identity',position='dodge')   #則不進行堆疊
image.png

以上是基本繪制的參數(shù),此外還有美化的一些參數(shù)
labs 橫縱坐標軸的名稱
ggttitle 標題名稱
geom_bar(width= )設(shè)置條形大小,默認情況下,設(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)
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容