ggplot2给选定的分面加背景.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ggplot2 给选定的分面加背景 我这个公众号不像大多数所谓的生信从入门到精通的 各种其实只是搬运点入门教程的群众喜闻乐见的东西。正如 我在《为什么要开这个公众号》里说的,这是小众的,有个 人色彩的各种原创文。我不可能像其它公众号一样招两小弟 当客服,很多人在后台向我扔来了许多的问题,由于个人精 力有限,只能优先解答「知识星球」的问题,上次写的《同 一数据多变量分组的 boxplot? 》,图虽然简单,却穿着好多 件马甲,而我把它扒光了给你看 ?? 上面这个图,你看着高大 上吧,我都可以吐它一脸口水。每一个有灰色背景的图,在 x 轴上 violin 都够到边界了, 其实所有的 violin 都够到了, 这 证明什么?每个 violin 之间其实不可比较!你能想像几个独 立的数据,在统一的 bin width 情况下,画 density curve , 竟然最高点都一样高吗?显然可能性几乎为 0 。这个如果使 用 ggplot2 的话,可以使用 scale=width 强制拉成一样高, 但我不推荐,正如我前面说的,不可比较了。默认参数 scale=area ,积分面积一样,和 density curve 一样解析, 另外的参数 scale=count ,高度与计数同比例, 和 histogram 一样解析,而 scale=width 强制拉成一样高,如果没有在显 眼处说明,误导性太强。画这种图也可以手工拼,这样就简 单了。在你需要的情况下,加个灰色背景嘛,最后拼图嘛。 当然拼图不一定要在 illustrator 里拼,比如你用 grid ,先画 好坐标轴,然后水平上定义几个一样大的 viewport ,每一个 violin 都画在相应的 viewport 里面,对于画图函数来说, viewport 就是整个画布了(虽然只是画布里的一块区域) , 所以你要么画 violin ,要么在画之前先画个矩阵,一路画下 来,代码可以直接生成这样的图,但这图每一个 violin 都是 独立画的 (当然也不是完全独立, 每一个水平上的 ylim 是有 统一的),就算代码一步生成,也跟 illustrator 里拼没两样。 这里我要教你用 ggplot2 自动生成,其实解决思路早已推送 过,请看《 facet_plot :加图层到特定分面,方法二》 ,也正 如我在《什么!你的图上有一双看不见的手》里说的,你们 以为我在教 ggtree ,其实同时在教 ggplot2 。这里有一个难 点是 y 轴不统一, 这会给画矩阵带来麻烦。 当然由于这个 2D 的图是分面的,所以每一个 panel只有1D,那么y轴的问 题可以通过占据整个画图 panel 来解决,另一个要解决的是 x 轴,你画矩阵要数值,而画 violin 的 x 轴是分类型数据, 这里需要变换一下,用数值来画图,最后在 x 轴用分类来标 识。 library(ggplot2) set.seed(123)d 1:5], 20, replace=T), y = sample(LETTERS[1:5], 50, replace=T), val = rnorm(1000))d$xx 1:5], y=LETTERS[1:5])d2$xx aes(xmin=xx-1/2, xmax=xx+1/2, ymin=-Inf, ymax=Inf), fill=grey) + geom_violin(data=d, aes(xx, val, fill=x)) + facet_grid(y~., scale=free) + scale_x_continuous(breaks=as.numeric(f), labels=f) + theme_bw() + theme(axis.text=element_text(size=12, face=bold, color=firebrick)) + xlab(NULL) + ylab(NULL) 这里为了大家看清 xy 轴,加大了 字体并且用红色,可以看出分面之间的 y 轴取值范围并不相 同,但我用了 Inf 占据了整个画图的 panel ,而且大家也可以 看到,各个 violin 的曲线最高点(把你的脑袋转 90 度来看) 是不一样的,像提问中的图,所有最高点都到了背景方框的 边界上了,是有误导性的,提问者的图肯定是在某篇文章里 看到,然而很多 SCI 文章的图,都是有问题的。外行人看着 高大上,内行人看一眼就想吐口水。

文档评论(0)

2105194781 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档