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

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

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

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

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

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

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. 你的环境有问题吧
  • 2. 傻逼你会用吗。

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

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

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

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

Continue reading

画图倒不如手绘

在《漫画版的进化树你见过吗?》一文中,我介绍过一个R包,可以把ggplot2转成漫画风格,今天介绍一个新的包,ggrough,它封装了一个叫roughjs的javascript库,可以把ggplot2转成手绘风格:

require(dplyr)
library(ggplot2)
count(mtcars, carb) %>%
  ggplot(aes(carb, n)) +
  geom_col() + 
  labs(title="Number of cars by carburator count") + 
  theme_grey(base_size = 16) -> p 
p

Continue reading

用ggplot2画3D

在《扪心自问,meme几何?》一文中,我画了一只兔子,今天给大家演示一下画一只3D版本的兔子,我们知道ggplot2不支持3D,只能画2D的图,但3D其实只是视觉上的,显示在你屏幕上的,同样只是2D。所以我们要做的,就是把3D的坐标转换成2D,然后画出2D的图片来,而这2D看上去有3D的效果。

Continue reading

Author's picture

Guangchuang Yu

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

Postdoc researcher

Hong Kong