棒棒糖圖,就是長得像棒棒糖一樣的圖(一句廢話),和柱形圖,散點(diǎn)圖想要表達(dá)的意思是一致的,不過展示會(huì)更加好看一點(diǎn),是點(diǎn)圖geom_point()和堆疊圖geom_segment()的組合,今天這篇文章主要介紹幾種常見的棒棒圖表現(xiàn)形式,以及一些美化。
0.準(zhǔn)備工作
#讀取數(shù)據(jù)
> data<-read.table("data.txt",header = T)
> head(data)
ID NUM
1 A_1 64
2 A_2 59
3 A_3 53
4 A_4 58
5 A_5 58
#調(diào)用R包
> library(tidyverse) #是一個(gè)包含了dplyr、ggplot2、tibble等包的集合包
1.基礎(chǔ)繪圖
> ggplot(data, aes(x=ID, y=NUM)) +
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM)) +
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
- size:點(diǎn)的大小
- color:點(diǎn)外圈的顏色
- fill:點(diǎn)填充的參數(shù)
- alpha:透明度 [0,1]
- shape:點(diǎn)的形狀
- stroke:點(diǎn)描邊的大小

Fig.1
2.改變線的類型
> ggplot(data, aes(x=ID, y=NUM)) +
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM),linetype="dotdash" ) +
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
-
在geom_segment()中加入linetype改變線的類型。
Fig.2
3.美化,改變主題
加入theme()函數(shù)對(duì)fig.1進(jìn)行進(jìn)一步優(yōu)化,去掉背景顏色,增加Y軸標(biāo)題等。
> ggplot(data, aes(x=ID, y=NUM))
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM))
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
+ theme_light()
+ theme(
+ panel.grid.major.x = element_blank(),
+ panel.border = element_blank(),
+ axis.ticks.x = element_blank()
+ )
+ xlab("")
+ ylab("Value of Y")

Fig.3
4.水平棒棒糖圖
有時(shí)候我們需要水平的棒棒糖圖,來和其他的圖形組合,說明一些問題,只需要加入coord_flip()即可:
> ggplot(data, aes(x=ID, y=NUM))
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM))
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
+ theme_light()
+ coord_flip()
+ theme(
+ panel.grid.major.x = element_blank(),
+ panel.border = element_blank(),
+ axis.ticks.x = element_blank()
+ )
+ xlab("")
+ ylab("Value of Y")

Fig.4
5.調(diào)整坐標(biāo)順序
以上圖中,可以看到R會(huì)自動(dòng)對(duì)樣本進(jìn)行排序,在原文件中,樣本的排序順序?yàn)锳_1- A_100,但在繪圖時(shí),會(huì)變?yōu)锳1、A10、A100、A2。此時(shí)如果需要制定繪圖順序與文件中的順序一致,需要在繪圖前增加一步:
> data$ID=factor(data$ID,unique(data$ID))
重新繪圖:
> ggplot(data, aes(x=ID, y=NUM))
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM))
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)+theme_light()
+ coord_flip()
+ theme(
+ panel.grid.major.x = element_blank(),
+ panel.border = element_blank(),
+ axis.ticks.x = element_blank()
+ )
+ xlab("")
+ ylab("Value of Y")

Fig.5
這里看到Fig.5中的樣本數(shù)量就與數(shù)據(jù)文件中一致了。
引用轉(zhuǎn)載請(qǐng)注明出處,如有錯(cuò)誤敬請(qǐng)指出。
