R绘图:唱一半的歌,画一半的图 gghalves

R绘图往期回顾:

R绘图:gggibbous,基于ggplot2的Moon charts

R绘图:ggeconodist,基于ggplot2的另类箱图

R语言学习系列之“多变的热图”

蚂蚁金服在线可视化引擎 G2

R绘图:无与伦比的华丽风行(桑基图)

R绘图:相关性分析与作图(单基因相关性)

R绘图:相关性分析与作图R绘图

ggsci: 高大上的论文配色,一文解决配色问题

R绘图 ggpubr: 为学术而生

TCGA数据分析系列之火山图

R绘图 雷达图-单基因泛癌差异表达的另类展现形式

有的时候,只画一半的图,或者你一半我一半拼凑起来,会有意外的效果,而R包gghalves就可以在ggplot2的基础上,画一半的图.

多聚集数据的几何图形,如geomboxplot、geomviolin和geom_dotplot是(近)对称的。在显示信息的空间有限的情况下,我们可以通过将几何图形分割成两半并显示额外的几何图形

  1. geom_half_boxplot

  2. geom_half_violin

  3. 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数据分析大全

(0)

相关推荐

  • 昨晚熬夜整理的超级R绘图技巧——USing ggplot(下)

    # 加载需要的包 library(tidyverse) library(gcookbook) 21.使用facet_grid(x~.)分页 ggplot(iris,aes(Sepal.Length)) ...

  • 【R分享|提示】 新手踩过的坑,你踩过几个?(上)

    " 错并不可怕,怕的是一错再错"   --科白君 编辑 : 科白维尼. 原创微文,欢迎各位转发转载. 尽管R语言不是一门纯编程语言,但是仍给新手带来无数的困难和痛苦.特别是,当你在 ...

  • 柱状图加一笔即可完成升华

    写在前面 长期以来,柱状图由于展示信息较少:均值和标准差/方差/标准误.所以没少被人们所诟病,箱线图似乎在这方面完整碾压了柱状图,展示了整个数据的结构.但近期我在顶级期刊NATURE上发现了柱状图.但 ...

  • R|散点图+边际图(柱形图,小提琴图),颜值区UP

    散点图作为一种展示2组连续变量关系的常用可视化方式之一,添加点,线,箭头,线段,注释,甚至函数,公式,方差表都没有问题. ggplot2-annotation|画图点"精",让图自 ...

  • ggplot2作图小例子

    ggplot2绘制几个常用图形:直方图,密度曲线图,散点图,箱线图,小提琴图,折线图(重点在小提琴图) ggplot2直方图 library(ggplot2) ggplot(data = diamon ...

  • 【我为你唱一首歌】一半清醒一半醉

    ​愿与执手立黄昏,愿与品茗粥尚温. 愿与添香捻熄灯,愿与捧卷书半生. 愿与剪烛夜已深,愿与对弈把酒分. 愿与叠袖相拭泪,愿与入梦共前尘. 愿与赏月顾星辰,愿与烹茶清未冷. 愿与静听诉衷肠,愿与话君心头 ...

  • 髡残:人一半禅一半儒;画一半野一半正

    髡残是清初四大高僧画家之一,三百多年来,髡残一直以其人品与画品并重的高华之气,影响着画坛,成为画家心目中的丰碑.髡残出家为僧后好游名山大川,所作画品,兼具了玄思和禅意,艺术上有一种傲岸的气度,有一种令 ...

  • 髡残|人一半禅一半儒;画一半野一半正

    髡残是清初四大高僧画家之一,三百多年来,髡残一直以其人品与画品并重的高华之气,影响着画坛,成为画家心目中的丰碑.髡残出家为僧后好游名山大川,所作画品,兼具了玄思和禅意,艺术上有一种傲岸的气度,有一种令 ...

  • 【图文】髡残:人一半禅一半儒;画一半野一半正

    髡残是清初四大高僧画家之一,三百多年来,髡残一直以其人品与画品并重的高华之气,影响着画坛,成为画家心目中的丰碑.髡残出家为僧后好游名山大川,所作画品,兼具了玄思和禅意,艺术上有一种傲岸的气度,有一种令 ...

  • 技术贴 | R语言:手把手教你画pheatmap热图

    导读: pheatmap默认会对输入矩阵数据的行和列同时进行聚类,但是也可以通过布尔型参数cluster_rows和cluster_cols设置是否对行或列进行聚类,具体看分析需求.利用display ...

  • R绘图:无与伦比的华丽风行(桑基图)

    首先看到这个名字,有没有勾起你的某些回忆呢? R绘图我们已经出过几期 R绘图 ggpubr: 为学术而生 R绘图 ggsci: 高大上的论文配色,一文解决配色问题 R绘图:相关性分析与作图 R绘图:相 ...

  • 千千阙歌 I 一半入人间烟火 一半唱悲欢离合

    世上有三个桃花源 一个在书里 一个在心里 一个,在这里                   by.桃花源间 上期回顾→千千阙歌  II  赠下弦月:深林人不知,明月来相照 编辑:洛 约稿.审核:下弦月 ...

  • 画到一半不想画怎么办?这位日本沙雕画师的画承包了我一年的笑点

    我想要不是很喜欢很有激情画画的人以外 那些美术生和艺术生出身的 对于画画这件事 还是能拖延就拖延 拿起画笔 铺好画纸 还是内心无法心静 又或者另一种推辞 还没找到灵感 于是东瞧瞧西看看 刷刷新闻.听听 ...