论文写作不要滥用条形图,箱线图加点图才是方向。除了分类数据计数,否则不准用条形图,要箱线图加点图。
举个例子来看看,先创建一个数据
df <- data.frame(
"Distribution" = c(rep("Unimodal", 500),
rep("Bimodal", 250),
rep("Trimodal", 600)),
"Value" = c(rnorm(500, 6, 1),
rnorm(200, 3, .7), rnorm(50, 7, 0.4),
rnorm(200, 2, 0.7), rnorm(300, 5.5, 0.4), rnorm(100, 8, 0.4))
)
这个数据有两列,是清洁数据,ggplot2的最爱。
接下来修改以下因子的水平,用于调整x轴的顺序,这在之前讲过很多次
df$Distribution <- factor(df$Distribution,
levels(df$Distribution)[c(3, 1, 2)])
一般情况下,我们作图是这样的,用条形图来展示
library(ggplot2)
ggplot(df, aes(Distribution, Value))+
geom_col(aes(fill = Distribution))

通常情况下,我们的文章中都喜欢这种图,但是这是有问题,这个图一开始是用于分类变量计数用的,并不适合连续型变量,因为他不能反应数据的分布。
所以,我们开始尝试用四分位箱线图来画
library(ggplot2)
ggplot(df, aes(Distribution, Value))+
geom_boxplot(aes(fill = Distribution))

图有很大变化,此时我们还喜欢加上点图,这也是杂志社推荐的方式
library(ggplot2)
ggplot(df, aes(Distribution, Value))+
geom_boxplot(aes(fill = Distribution))+
geom_jitter()

这时候,我们能够看出,即使是一组,组内的数据也明显有分布特征,比如中间那个就分成了3群。
这个时候,小提琴图可以反应数据的分布特征
library(ggplot2)
ggplot(df, aes(Distribution, Value))+
geom_violin(aes(fill = Distribution))

我们也可以叠加点图呈现更多的信息
library(ggplot2)
ggplot(df, aes(Distribution, Value))+
geom_violin(aes(fill = Distribution))+
geom_jitter()

这个图,在单细胞分析里面很常见,但是还是瑕疵,因为那些点不守规矩,
ggforce
里面有个geom_sina
图层可以把点限定在小提琴中,library(ggplot2)
library(ggforce)
ggplot(df, aes(Distribution, Value))+
geom_violin(aes(fill = Distribution))+
geom_sina()

这样明显好看很多,而且我觉得以后单细胞那边的图,大概率都得改成这样。
但是,还是有问题,因为点图已经能够展示数据的分布了,那么小提琴就没有了作用,所以可以去掉小提琴图层
library(ggplot2)
library(ggforce)
ggplot(df, aes(Distribution, Value))+
geom_sina(aes(color = Distribution))

这个图层简洁明了,现在看看,是不是条形图的信息严重缺失,甚至有时候会起到误导的作用。