
小伙伴发来这个图,问我是不是bug ,这真是犯了程序员的社交礼仪。 你如果对一个程序员说,“你的代码有bug。” 他的第一反应是:
如果你委婉地说:“你这个程序和预期的有点不一致,你看看是不是我的使用方法有问题。” 他本能地会想:“操,是不是出bug了!”
这显然不是bug ,这是绝大多数人对ggplot2 的误解,他们认为用xlim 和ylim 是放置一个窗口去看你的图,然而在ggplot2 是限定一个窗口去过滤你的数据,并重新画图!你的数据被过滤了!如果是放置窗口在图上,一条线从A到B,如果B在窗口之外,那么线被截断了,你看到半条线,但如果是过滤数据呢?B不复存在,那么线条A到B也不复存在,没有B,A到B的线画不出来。就是这样,所以这绝逼不是bug ,而是程序员本能反应的第二种情况,你用错了。 那么怎么样不过滤数据,而只是设置可视化窗口呢?你基本上很少看到有人这么用,因为几乎99%的人都只知道xlim 和ylim ,一般人我也不告诉他,快点拿起小抄把下面的代码记录一下。 library(ggplot2) library(ggtree)
tr = rtree(30) p = ggtree(tr) + geom_tiplab() p + geom_point(color='red', size=5) + coord_cartesian(xlim=c(-1,2))

|