小密圈的问题,不是三两句话可以说明白的事情,必须要写文来解答,上一次写文是《听说你还不会画热图》,里面正好吐槽了某知乎大V的「除了ggplot2之外其它都是鸡肋」,这次正好也可以再次呼应一下。

这个图明显是R的base graphics做的,图是可圈可点的,能做出这图来,也已经是告别了只会用plot的低级趣味。这其实是4个图拼起来的,第一个图只是多了个y轴而已,它们画起来是一样的,那就是只画boxplot,不画x和y轴,(你可能会说不是有x轴?),x轴是后面再加上去的,而且加x轴的时候,不写labels,只有线条没有文本(你可能又会说明明有文本!),因为axis这个函数只支持labels要么是水平的,要么是垂直的,旋转某个角度是不支持的,所以labels是额外再打上去的。这里一张小小的图,门道还是挺多的。


Continue reading

据说1024是程序员的节日,就在这一天,Y叔开始了第一次的网络讲座,首次在网络上露面。内容就是上一周预告的《线上沙龙》。

很多人想要学ggplot2 + ggtree,但我的定位不是技术性的培训,而是学术讲座,所以一开始把问题摆出来,是有一些问题存在,有knowledge gap,然后我要去解决它。当然考虑到听众的knowledge gap也很大,我在介绍ggtree的之前,也帮大众撸了一篇R的画图,在这简短的时间里,你应该了解了R几个画图系统的关系,base和grid我在slides里写graphic system,但lattice和ggplot2我写的是data visualization system,我对它们是有区别对待的,像lattice和ggplot2自己是不成一体的,但提供了高阶的数据可视化方法/语法。听完讲座你也应该了解ggplot2,知道要怎样去入门,知道重点该学什么。


Continue reading

下面这张吐槽LaTeX的图,太深得我心。

而ggplot2这种文本跑出界的事情,也太常见,以至于我在ggtree的FAQ专门指出来,要用xlim给x轴分配多点空间,这是由于数据是数据空间,而文本是像素空间。你画图的画布由数据空间决定,然后文本就从指定的位置(除了坐标,还取决于你align的方式和adjustment微调)开始打出来,一不小心就打出界了。这一点我在FAQ里,除了告诉你用xlim解决之外,我也给出了上面的解释,所以我一直强调,不要以为我在教ggtree,我其实是在教ggplot2。

后面就有人问了ggplot2字体溢出的事情,他所遇到的溢出,似乎更不应该发生,因为是坐标轴上的字体溢出,然而产生的原因是一样的,解决方案也是一样的,请用力猛戳《ggplot2字体溢出的那点破事》。


Continue reading

大量的生信公众号在各种linux入门、perl入门、python入门、R入门、软件安装、跑跑示例代码、流程。我自己平时根本不会去看这些生信号,在《s01 - Counting DNA Nucleotides》一文发出去后,就被爪哥说不能跟着走低端路线,囧rz…

还好我多半写的是自己的东西,目前还没有掉进「低端」的坑里,今天继续画图,唯有赏心悦目的图能抚慰人心。

我写了一个包叫《ggimage:ggplot2中愉快地使用图片》,从此图上嵌图(ggplot对象)或图片变得轻而易举。某一天写着玩,写了个《geom_pokemon: 使用pokemon画图》的图层,引起了人民群众的尖叫,国外有妹纸用来可视化NBA数据《大开眼界+多图慎点:Pokémon x NBA and other fun with ggimage》,国内有汉子用来可视化复旦大学考研的报考专业《你的专业是那一只Pokémon神兽?》。


Continue reading

小伙伴发来这个文章中的图,想要实现类似的图,用变量给axis text上色,并生成legend:

这个可以说ggplot2是不支持的,aes映射不会被应用于axis上,而theme也不支持aes映射,你只能自己手动搞个color vector传给theme来上色,但这无法生成legend。

我只能打开脑洞,legend借助于额外的图层来生成,但这个额外的图层又不是我们想要在图形上展示的,这又是个无米之炊,我能想到的就是让图层透明,实际有,但你看不到,当然这样自动生成的legend也会看不到,但legend可以后面再修改,于是这不支持的事情,就通过变通变得可能:

require(ggplot2)

set.seed(2017-07-04)
d <- data.frame(x = letters[1:5], y = rnorm(5), 
        group = sample(c("Control", "Treatment"), 5, replace=TRUE),
        type = sample(LETTERS[1:2], 5, replace=TRUE)
)

p <- ggplot(d, aes(x,y)) + 
    geom_col(aes(fill=group))

这个代码很好懂,画一个柱状图,按group上色。


Continue reading

Dear Dr. Guangchuang Yu, I write to you regarding a doubt concerning the enrichGO function from Clustalprofiler package. I have been used this package before, but now I’m using the same R script and I have an error message.

This is the command I use:

go.bp <- enrichGO(gene = gene.df$ENSEMBL, universe = universe.ENSEMBLID, keytype = ‘ENSEMBL’, OrgDb = org.Ce.eg.db, ont = ‘BP’, pAdjustMethod = ‘BH’, pvalueCutoff = 0.01, qvalueCutoff = 0.05, readable=T)

and the error is the following one:

No gene set have size > 10 … –> return NULL…

My input list is attached to this email (101 genes in total). When I use this list in a web resource such as GOrilla it gives to me the proper GO terms.

Thank you very much in advance. Best regards,

María

最近clusterProfiler用户的问题,这个问题还蛮普遍。这个我在《why clusterProfiler fails》中也有谈到,并不是能出结果就是好的。没有结果也是一种结果。


Continue reading

Author's picture

Guangchuang Yu

a senior-in-age-but-not-senior-in-knowledge bioinformatician

Postdoc researcher

Hong Kong