画图给点分组?》这一篇文章中给出了方法,画出两层分组的点图,一层分组是按照离散型变量在x轴上分组,第二层是每一个分组里,再来一个离散型变量再分一次。非常感谢读者们的反馈,原来这第二层分组在ggplot2中是有内置的实现方式的,那就是position_jitterdodge

Continue reading

当年我准备考博的时候,健康院某PI(本来的意向导师)找我帮他在iMac上安装盗版的Papers(文献管理器)和Illustrator(PS的兄弟),安装后,跟我说:“我们做科研的,最重要的软件就是Papers和Illustrator。”,当然后来感觉挺坑我,就放弃了。

这么多年过去了,至今这两个软件我都没用过!我画图,追求的是全部由代码产生,至今还没有修图的需求,也就没有试过Illustrator了。

Illustrator必须有些门槛,而且关键是Adobe绑死在PDF上,实际上如果80%的问题都可以用PowerPoint解决,剩下那20%,反正也不常用。而PowerPoint的优点是没有门槛,傻瓜式操作,像我这种怀疑自己智商的人,都会用啊!

要是R画的图,能够在PowerPoint里面编辑就好了!

要是R画的图,能够在PowerPoint里面编辑就好了!

要是R画的图,能够在PowerPoint里面编辑就好了!

Continue reading

library(ggplot2)

pups <- nlme::RatPupWeight %>% 
    janitor::clean_names() %>%
    dplyr::mutate(litter = as.integer(litter))

p <- ggplot(pups, aes(x = litter, y = weight, color = treatment))

针对某一个x值,我们可以画出相应y的统计量,比如均值、方差等,这些都可以“手工”的方式通过图层叠加来实现。

p + geom_jitter(shape=1) + 
    stat_summary(fun.y = "mean", size=2, geom="point", color = 'black') + 
    stat_summary(fun.data = mean_cl_normal, geom="errorbar", width=.1, color='black')

Continue reading

有小伙伴问为什么R里循环出不来图?

其实看我公众号的各位读者们,你们不应该有这个问题,如果有,那么证明我的文章没有好好看!有两篇很重要的文章《扪心自问,meme几何?》和《树变图,图变树? ?》,特别是第二篇,和这个问题息息相关。

首先假设我们有一个图:

require(ggplot2)
p = qplot(1:10)

为什么在终端打p可以出图?

因为在R里,所有都是对象,而在终端里你输入一个对象回车,R会去找相应的方法去打印出来,如果是S3对象,会去寻找print方法,而如果是S4会去找show方法。

Continue reading

转换UpSet图为ggplot对象

我在2018年4月份的一条推特文,https://twitter.com/guangchuangyu/status/988672880551518210,可以把UpSetR变成ggplot然后可以各种玩,比较我在推特文中所展示的,图上嵌入venn图、使用cowplot拼图等。然而过了大半年,我的pull request并没有被作者接收,也就是说这功能还不存在于官方的版本中。

如果有兴趣的话,应该安装我fork的版本。

devtools::install_github("GuangchuangYu/UpSetR")

Continue reading

(翻)云(覆)雨图

生物狗喜欢画barplot,但毕竟只有均值和标准误差信息量太低,万一有outliers呢?万一不是正态分布呢?所以就吐槽了又吐槽,但大家还是乐此不疲,因为大家都在用,因为很多人只会画barplot,所以产生各种反barplot运动,并呼吁大家使用boxplot,boxplot有四分位数的统计量,可以反应outlier和数据的分布,比barplot高得多了。

然而事情是不断在进化的,我们的手段是要跟上潮流的,现在的潮流就是除了要有统计量,还要有原始数据,甚至于有统计推断,全集中一图中,揭开数据的红盖头,给大家呈现全方位无死角的面貌。

Continue reading

小伙伴发来这个图,问我是不是bug,这真是犯了程序员的社交礼仪。

你如果对一个程序员说,“你的代码有bug。” 他的第一反应是:

    1. 你的环境有问题吧
    1. 傻逼你会用吗。

如果你委婉地说:“你这个程序和预期的有点不一致,你看看是不是我的使用方法有问题。”

他本能地会想:“操,是不是出bug了!”

这显然不是bug,这是绝大多数人对ggplot2的误解,他们认为用xlimylim是放置一个窗口去看你的图,然而在ggplot2是限定一个窗口去过滤你的数据,并重新画图!你的数据被过滤了!如果是放置窗口在图上,一条线从A到B,如果B在窗口之外,那么线被截断了,你看到半条线,但如果是过滤数据呢?B不复存在,那么线条A到B也不复存在,没有B,A到B的线画不出来。就是这样,所以这绝逼不是bug,而是程序员本能反应的第二种情况,你用错了。

那么怎么样不过滤数据,而只是设置可视化窗口呢?你基本上很少看到有人这么用,因为几乎99%的人都只知道xlimylim,一般人我也不告诉他,快点拿去小抄把下面的代码记录一下。

Continue reading

Author's picture

Guangchuang Yu

Bioinformatics Professor @ SMU

Bioinformatics Professor

Guangzhou