什么是啞鈴圖(Dumbbell Chart)
啞鈴圖(Dumbbell Chart)就像它的名字一樣裳扯,長(zhǎng)得像一個(gè)啞鈴铜秆。當(dāng)然當(dāng)你有多個(gè)節(jié)點(diǎn)的時(shí)候誓琼,它們還有點(diǎn)像DNA油湖,所以也有人把這種圖形稱為DNA圖巍扛。
啞鈴圖是一種很好的可視化方式,比如你想要表征不同指標(biāo)的不同組的情況你可以用多個(gè)“啞鈴”表示乏德。另外撤奸,你想要表示某一組在外界刺激后的變化情況也可以用這種方式。
我們來(lái)看兩個(gè)例子。第一個(gè)例子中比較了成年人和青少年在使用視頻游戲設(shè)備方面的差異胧瓜。很直觀的可以看到青少年比成年人頻率更高矢棚,同時(shí)在不同設(shè)備的使用頻率也能看到明顯差異。
第二個(gè)例子贷痪,分別顯示了最低價(jià)格幻妓,中間的價(jià)格和最高價(jià)格蹦误,可以看到不同項(xiàng)目的花費(fèi)差異劫拢。
那么在生物研究中我們可以用于表示哪些數(shù)據(jù)呢?
最簡(jiǎn)單的强胰,當(dāng)然是有多個(gè)指標(biāo)的時(shí)候舱沧,我們可以用于顯示對(duì)照組和實(shí)驗(yàn)組的差異∨佳螅或者是男女之間的差異等等熟吏。
當(dāng)然,如果你想顯示給予一些刺激玄窝,比如用藥前后指標(biāo)的變化牵寺,這也是一個(gè)選擇。
另外恩脂,現(xiàn)在有很多是多組學(xué)的數(shù)據(jù)帽氓,我們會(huì)統(tǒng)計(jì)志愿者的年齡,或者展示某些生理指標(biāo)的范圍等俩块,所以我們也可以考慮第二個(gè)例子黎休,用啞鈴圖進(jìn)行展示,這樣可能會(huì)比圖標(biāo)看起來(lái)更加直觀一些玉凯,也顯得更加美觀势腮。
怎么做啞鈴圖
使用ggalt包或者plotly包就可以實(shí)現(xiàn)啞鈴圖的制作。我們選擇使用ggalt包(該包基于ggplot2包)漫仆。
1)需要什么格式的數(shù)據(jù)
這次使用一個(gè)不同學(xué)校男女年收入(單位:千美元)的數(shù)據(jù)捎拯。
具體如下:
dat <- read.csv("https://raw.githubusercontent.com/plotly/datasets/master/school_earnings.csv")
head(dat)
School Women Men Gap
1 MIT 94 152 58
2 Stanford 96 151 55
3 Harvard 112 165 53
4 U.Penn 92 141 49
5 Princeton 90 137 47
6 Chicago 78 118 40
一共統(tǒng)計(jì)了21所美國(guó)高校,包括哈佛盲厌、斯坦福署照、MIT等。
2)如何作圖
library(ggplot2)
library(ggalt)
ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
geom_dumbbell(colour_x = "#FFB6C1",colour_xend = "#4169E1",size_x = 2,size_xend = 2,size=0.5,color="gray")+
theme_light()+
theme(panel.grid.minor.x =element_blank(),
)+
xlab("Annual Salary (in thousands)")
當(dāng)然還可以狸眼,進(jìn)一步修改藤树,比如:添加一個(gè)外環(huán)
library(ggplot2)
library(ggalt)
ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
geom_dumbbell(colour_x = "#FFB6C1",colour_xend = "#4169E1",size_x = 2,size_xend = 2,size=0.5,color="gray")+
geom_point(aes(x=Women,y=School,size=Women),alpha=0.5,color="#FFB6C1")+
geom_point(aes(x=Men,y=School,size=Men),alpha=0.5,color="#4169E1")+
theme_light()+
theme(panel.grid.minor.x =element_blank(),
legend.position = c("none")
)+
xlab("Annual Salary (in thousands)")
又比如再加入Gap的人數(shù):
library(ggplot2)
library(ggalt)
ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
geom_dumbbell(colour_x = "#FFB6C1",colour_xend = "#4169E1",size_x = 2,size_xend = 2,size=0.5,color="gray")+
geom_point(aes(x=Women,y=School,size=Women),alpha=0.5,color="#FFB6C1")+
geom_point(aes(x=Men,y=School,size=Men),alpha=0.5,color="#4169E1")+
geom_point(aes(x=Gap,y=School),color="#9ACD32",shape=2)+
theme_light()+
theme(panel.grid.minor.x =element_blank(),
legend.position = c("none")
)+
xlab("Annual Salary (in thousands)")
也可以換一個(gè)風(fēng)格:
library(ggplot2)
library(ggalt)
ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
geom_dumbbell(colour_x = "#8B8B7A",colour_xend = "#9ACD32",size_x = 2,size_xend = 2,size=0.5,color="gray",dot_guide = T)+
theme_light()+
theme(panel.grid.minor.x =element_blank(),
panel.grid = element_blank(),
legend.position = c("none")
)+
xlab("Annual Salary (in thousands)")
還可以加入平均值:
library(ggplot2)
library(ggalt)
dat$mean<-apply(dat[,2:3],1,mean)
ggplot(aes(x=Women,xend=Men,y=School),data=dat)+
geom_dumbbell(colour_x = "#4682B4",colour_xend = "#CD2626",size_x = 3,size_xend = 3,size=0.5,color="gray",dot_guide = T)+
geom_point(aes(x=mean,y=School),color="#EE7621",size=3)+
theme_light()+
theme(panel.grid.minor.x =element_blank(),
panel.grid = element_blank(),
legend.position = c("none")
)+
xlab("Annual Salary (in thousands)")
然后可以用AI添加一下圖例哦
往期R數(shù)據(jù)可視化分享
R數(shù)據(jù)可視化15:傾斜圖 Slope Graph
R數(shù)據(jù)可視化14:生存曲線圖
R數(shù)據(jù)可視化13:瀑布圖/突變圖譜
R數(shù)據(jù)可視化12: 曼哈頓圖
R數(shù)據(jù)可視化11: 相關(guān)性圖
R數(shù)據(jù)可視化10: 蜜蜂圖 Beeswarm
R數(shù)據(jù)可視化9: 棒棒糖圖 Lollipop Chart
R數(shù)據(jù)可視化8: 金字塔圖和偏差圖
R數(shù)據(jù)可視化7: 氣泡圖 Bubble Plot
R數(shù)據(jù)可視化6: 面積圖 Area Chart
R數(shù)據(jù)可視化5: 熱圖 Heatmap
R數(shù)據(jù)可視化4: PCA和PCoA圖
R數(shù)據(jù)可視化3: 直方/條形圖
R數(shù)據(jù)可視化2: 箱形圖 Boxplot
R數(shù)據(jù)可視化1: 火山圖