今天继续分享生信分析中常见的图形 -- 小提琴图。绘制的过程依然是基于ggplot2
,然后在此基础上进行美化以符合大众的审美标准!
小提琴图可用于显示数据分布及其概率密度。可以认为是箱形图和密度图的结合体,主要用来显示数据的分布形状。所以,可以从图中大致获取到箱线图的所有信息。当然小提琴的另外一个优势在于,除了显示箱线图的分位数统计外,它还可以还显示了数据的整体分布,这一优点在数据有多个峰值时体现地尤为明显。
话不多说,绘图代码如下:
library(ggplot2)
library(dplyr)
library(tidyr)
# 获取测试数据
data <- read.table("https://raw.githubusercontent.com/zonination/perceptions/master/probly.csv", header=TRUE, sep=",")
# 数据清洗为需要的格式
data <- data %>%
gather(key="text", value="value") %>%
mutate(text = gsub("\\.", " ",text)) %>%
mutate(value = round(as.numeric(value),0)) %>%
filter(text %in% c("Almost Certainly","Very Good Chance","We Believe","Likely","About Even", "Little Chance", "Chances Are Slight", "Almost No Chance"))
head(data)
text value
1 Almost Certainly 95
2 Almost Certainly 95
3 Almost Certainly 95
4 Almost Certainly 95
5 Almost Certainly 98
6 Almost Certainly 95
# 绘图
ggplot(data, aes(x=text, y=value, fill=text, color=text)) + geom_violin(width=2.1, size=0.2) + theme(legend.position="none",axis.text.x=element_text(angle=20)) + xlab('') + ylab("Assigned Probability (%)")
结果如下:
虽然图已经画出来了,但是这个图现在是素颜的状态,这可是不符合大众的审美了。所以,我们多多少少需要给这个图化个妆,打扮一下来迷惑一下观众:
library(viridis)
ggplot(data, aes(x=text, y=value, fill=text, color=text)) + geom_violin(width=2.1, size=0.2) + xlab('') + ylab("Assigned Probability (%)") + scale_fill_viridis(discrete=TRUE) + scale_color_viridis(discrete=TRUE) + theme_minimal() + theme(legend.position="none") + coord_flip()
效果如下:
图好不好看,配色起到很大的作用,这里我们使用viridis
包的配色方案,该包还具有一个优点就是在映射颜色时能够让接近的值具有相似的颜色,而彼此远离的值具有更多不同的颜色,形成较大的感知范围让人易于区分。