大家是否还记得我写的文章《画个小圈圈》?里面吐槽了ggpubr这个包的存在是制造混乱,徒增学习成本。我们知道ggplot2包里有个qplot函数,而在《ggplot2》的第一版中,hadley先用了一章介绍qplot,再介绍grammar of graphics,然后这个qplot就被吐槽,先入为主,给学习grammar of graphics,学习ggplot2语法制造了不必要的麻烦。然后如果你看《ggplot2》第二版,你就会发现qplot这一章被删掉了。我说ggpubr制造混乱,徒增学习成本并不是为了吐槽某公众号,而是实事求是。

我并不反对封装,我并没有强迫症说大家一定要用ggplot2图形语法,而不能封装函数,我想我在《画个小圈圈》已经说得很清楚了,封装画图的包,按我的观点是要么卖了数据处理的专业知识,要么卖了画图的专业知识。如果一个包做的封装太过于简单,像ggpubr这种,数据必须是用户整理好的data.frame,而画图只是简单的两三个图层的叠加,那么当然可以减少你敲键盘输入,然而影响了初级用户学习ggplot2,复杂的东西,我们当然想要用封装好的函数,等你自己啥都搞懂了,老板都要跟你掀桌子了。简单的东西也可以封装,减少输入嘛,只是特别不适用于ggplot2的图层,简单的设定你写个主题,我都举双手赞成,但两三个图层的简单拼凑我不支持,因为图层是积木,大家学习就是要对积木熟悉,然后才能搭出复杂的东西出来。特别简单的图层叠加正是你熟悉积木的时候,你不多敲点键盘,做为练习,又怎么能做出稍复杂点的东西呢?

Continue reading

很多人都在学ggplot2,也有很多「高手」,比如你搜索「精通ggplot2」,你甚至会看到各种「从入门到精通」的课程,然而都是各种照猫画老虎的入门菜谱而已,当然广大群众去上课也可能只是为了求菜谱好在需要的时候,可以copy-paste而已。

ggplot2学习容易,因为无非是图层叠加,而图层的参数一致性非常好,网上也有很全的文档。然而要深入很难,比如你想干点什么是ggplot2自身没有支持的,你需要自己去hack,需要用到更底层的东西的时候,一般情况下,会无从入手,尝试之后才知道什么叫绝望!因为ggplot2套路实在是太深。

正如我在《听说你还不会画热图》吐槽的,有些所谓的「高手」实际上连ggplot2底层是什么都不知道!然后可以把ggplot2吹上天。很多人根本不知道当你打下ggplot这个命令的时候,到底发生了什么?要理解ggplot2并不容易,正如前面所说「套路太深」,没有金钢钻,读不了它的代码,有没有一个简单点的包,能够读懂代码,并且有助于理解ggplot2呢?我想我的meme包就非常好,虽然仿的有点肤浅,然而胜在简单,看过下面这两篇文章的,都知道这个包在做什么。

Continue reading

有小伙伴在说可以用par(mar)来设置画图的margin,但不能应用于ggplot2,这个可能很多新手都会很困扰,可能需要一段时间的探索之后,才能发现原来是用theme来设定。

这当然你可以归结于说ggplot2和base plot是不同的东西,但从实质画图参数这一点而言,并没有什么同与不同,无非是设置的方式不同而已,而这种方式都是人定义的,我们完全可以人为定义它们兼容。

Continue reading

Hello all,

When I plot some data using ggtree, the out groups are on a very long branch length. The out groups are 75 and 76 in the example below.

I would like to keep the out groups in the tree but ignore their branch lengths to make presentation easier.

Continue reading

一千个伤心的理由

眼看着2月14号就要到来了,又是一年一度的画红心装13的时候,这种事情已经被我BS了,请猛击:《画❤️装geek什么的,都弱爆了!😜》。红心已经没什么好画的了,特别是在我画了生日蛋糕,并用蛋糕画红心之后,《130岁了,祝你生快》,是驴子是马,都没法晒肌肉了。当然红心还是会有所谓的理工宅男晒,除此之外还会有各种花招,来给单身狗撒狗粮。想要加入撒狗粮大军的,快点看《如何告别单身》。

Continue reading

话说有一只蛙,它旅游去了广东,游戏结束。

这篇文章,只想跟大家讲一讲ggtree,你值得拥有的强大的进化树可视化软件,高颜值的图,就在于指尖几行代码中。

最近养蛙很流行,就以蛙为例,读树用read.tree,然后一个ggtree的指令,树就画出来了。而你见证神奇的时刻就在于你不断+geom_xxx加图层,这里我用了geom_tiplab来加taxa label,而这个可不仅仅是名字哦,用emoji也可以,这里我用的竟然是图片,你没看错,也可以。只要指定geom="image"就OK,那个本来要打的文本,就会被当成是文件名,然后读图片画图片,一切尽在我的ggimage包。

Continue reading

ggplot2的一个坑

今天以ggplot2的一个坑来说一下,坑无处不在,防不胜防,你大可以试一下下面的代码:

> set.seed(123)
> require(ggplot2)
Loading required package: ggplot2
> rnorm(3)
[1]  0.8005543  1.1902066 -1.6895557
> set.seed(123)
> rnorm(3)
[1] -0.5604756 -0.2301775  1.5587083

在两次set.seed和rnorm之间,第一次因为加载了ggplot2,结果就不一样了!这必须是第二次是正确答案,也就是说加载ggplot2把你的seed给吃了!加载包会改变R环境?这绝对不是好主意,我们来试试加载别的包试试,比如我的clusterProfiler:

Continue reading

Author's picture

Guangchuang Yu

Bioinformatics Professor @ SMU

Bioinformatics Professor

Guangzhou