ggsymbol让点图样式更加丰富的R包
1.前言
用ggplot2
中的geom_point
来画点图时,
常常会选择点的样式,其依赖的是grid
中的pointsGrob
。所以点的样式选择可以参考points
中的pch
参数,看过说明的同学都知道这个参数是用数字0-25
,33-126
来控制。每个数字代表一种样式,但我们平时能选择的样式也没几种。有时候要想画个多边形的点都很困难。于是,两个月前,我写了ggstar
来画多种多边形的点,包括五角星,六角星,正五边形等等。具体可以参考《一个可以画星星图层的R包,了解下》。但是,这个包不能与geom_point
的样式一起映射。上周李陈浩
同学在biobabble
群里问我,有没有考虑支持geom_point
,我之前就有考虑的,只不过我觉得ggstar
还是独立开会比较好。然后厚缊
同学建议我整个symbol
图层。所以,这两天我写了ggsymbol
。这个包将geom_point
与ggstar
中的部分样式整合在一起,这样就可以一起愉快映射。
2.所有的样式
这个包是整合了R
自带的所有样式与ggstar
中的starGrob
的部分样式。之所以是ggstar
部分样式,是因为自带样式中pch
参数刚好在26-32
没有相应的shape
。所以我从ggstar
中选了一些较容易区分开的starshape
来填充了这部分。目前支持的样式以及它们对应的数字如下:
library(ggplot2)
library(ggsymbol)
d <- data.frame(p=c(0:127),f=c(rep("g",26), rep("s", 7), rep("g", 95)))
d$f <- factor(d$f, levels=c("g", "s"))
p <- ggplot() +
geom_symbol(data=d,
mapping=aes(x=p%%16, y=p%/%16, symbol=p, fill=f),
size=4, stroke=0.5, show.legend=FALSE) +
geom_text(data=d,
mapping=aes(x=p%%16, y=p%/%16+0.25, label=p),
size=3) +
scale_symbol_identity() +
scale_fill_manual(values=c("red", "blue")) +
xlab(NULL) +
ylab(NULL) +
theme(axis.ticks=element_blank(),
axis.text=element_blank())
p
0-25
和 33-127
是由pointsGrob
提供, 而26-32
则由ggstar中的starGrob
提供。
3. Demo
无论ggstar
还是ggsymbol
都是较为底层的轮子或者说是原材料。有了这些原材料,脑洞够大的,就能想到应用场景。如火山图,网络图,曼哈顿图,或者联动ggtree
等等。因为是基于ggplot2
的语法来开发的,所以只要熟悉ggplot2
,使用起来也完全没压力。ggsymbol
提供了geom_symbol
函数来生成图层,用symbol
参数控制样式。对应的scale_symbol_manual
来控制映射的图形样式。其余参数与geom_point
一致。
p <- ggplot(data=iris, aes(x=Sepal.Width,y=Sepal.Length)) +
geom_symbol(aes(symbol=Species, fill=Species),
color="grey60", size=2.5,
stroke=0.5) +
scale_fill_manual(values=c("#E41A1C", "#377EB8", "#4DAF4A")) +
scale_symbol_manual(values=c(28, 22, 21))
p