R绘图:唱一半的歌,画一半的图 gghalves
R绘图往期回顾:
R绘图:gggibbous,基于ggplot2的Moon charts
R绘图:ggeconodist,基于ggplot2的另类箱图
有的时候,只画一半的图,或者你一半我一半拼凑起来,会有意外的效果,而R包gghalves就可以在ggplot2的基础上,画一半的图.
多聚集数据的几何图形,如geomboxplot、geomviolin和geom_dotplot是(近)对称的。在显示信息的空间有限的情况下,我们可以通过将几何图形分割成两半并显示额外的几何图形
geom_half_boxplot
geom_half_violin
geom_half_point
安装加载包
if(length(getOption("CRAN"))==0) options(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")
if(!require("gghalves")) BiocManager::install("gghalves")
GeomHalfPoint
1 在x轴上,它们占据的空间最多是分配给特定因素的空间的一半
2 它们将总空间的左半部分或右半部分留给另一个geom使用
3 此外,默认情况下,geom_half_point水平和垂直抖动点。
ggplot(iris, aes(x = Species, y = Sepal.Width)) +
geom_point()
ggplot(iris, aes(x = Species, y = Sepal.Width)) +
geom_half_point()
其工作方式是将transformation=PositionJitter传递给geom。我们可以通过传递transformation参数来使用此转换的默认值
ggplot(iris, aes(x = Species, y = Sepal.Width)) +
geom_half_point(transformation_params = list(height = 0, width = 0.001, seed = 1))
或者改变转换参数本身
ggplot(iris, aes(x = Species, y = Sepal.Width)) +
geom_half_point(transformation = PositionIdentity)
GeomHalfBoxplot
GeomHalfBoxplot显示一个被切成两半并在x轴上分配给特定因子空间的左侧或右侧绘制的boxplot。
ggplot(iris, aes(x = Species, y = Sepal.Width)) +
geom_half_boxplot()
除了标准的side参数外,还可以将半盒绘图居中,并决定是否绘制errorbar。
ggplot(iris, aes(x = Species, y = Sepal.Width)) +
geom_half_boxplot(side = "r", center = TRUE, errorbar.draw = FALSE)
GeomHalfViolin
半小提琴,除了side参数外,它还支持可以传递给标准geomviolin的所有参数。
ggplot(iris, aes(x = Species, y = Sepal.Width)) +
geom_half_violin()
GeomHalfDotplot
GeomHalfDotplot与其他geoms略有不同,因为它不支持边参数,因为它已经通过stackdir内置到标准GeomDotplot中
ggplot(iris, aes(x = Species, y = Sepal.Width)) +
geom_half_violin() +
geom_dotplot(binaxis = "y", method="histodot", stackdir="up",binwidth=0.06)
那么,既然geom_dotplot可以用作半geom,为什么需要geom_half_dotplot?原因是当存在多个因素时,geom_dotplot不支持回避。让我们考虑以下示例:
df <- data.frame(score = rgamma(150, 4, 1),
gender = sample(c("M", "F"), 150, replace = TRUE),
genotype = factor(sample(1:3, 150, replace = TRUE)))
有了这些数据,我们想按基因型分组,但也要按性别划分图。这在使用标准geom时不太管用:
ggplot(df, aes(x = genotype, y = score, fill = gender)) +
geom_half_violin() +
geom_dotplot(binaxis = "y", method="histodot", stackdir="up", position = PositionDodge)
点图与小提琴图实际上是重叠了
使用geom_half_dotplot
ggplot(df, aes(x = genotype, y = score, fill = gender)) +
geom_half_violin() +
geom_half_dotplot(method="histodot", stackdir="up",binwidth=0.3)
Combining Different Geoms
library(tidyverse)
ggplot() +
geom_half_boxplot(
data = iris %>% filter(Species=="setosa"),
aes(x = Species, y = Sepal.Length, fill = Species), outlier.color = NA) +
ggbeeswarm::geom_beeswarm(
data = iris %>% filter(Species=="setosa"),
aes(x = Species, y = Sepal.Length, fill = Species, color = Species), beeswarmArgs=list(side=+1)
) +
geom_half_violin(
data = iris %>% filter(Species=="versicolor"),
aes(x = Species, y = Sepal.Length, fill = Species), side="r") +
geom_half_dotplot(
data = iris %>% filter(Species=="versicolor"),
aes(x = Species, y = Sepal.Length, fill = Species), method="histodot", stackdir="down") +
geom_half_boxplot(
data = iris %>% filter(Species=="virginica"),
aes(x = Species, y = Sepal.Length, fill = Species), side = "r", errorbar.draw = TRUE,
outlier.color = NA) +
geom_half_point(
data = iris %>% filter(Species=="virginica"),
aes(x = Species, y = Sepal.Length, fill = Species, color = Species), side = "l") +
scale_fill_manual(values = c("setosa" = "#cba1d2", "versicolor"="#7067CF","virginica"="#B7C0EE")) +
scale_color_manual(values = c("setosa" = "#cba1d2", "versicolor"="#7067CF","virginica"="#B7C0EE")) +
theme(legend.position = "none")
公众号“生信小课堂”
TCGA数据分析课程TCGA数据分析大全