- Date : [[2022-01-03_Mon]]
- Tags : #R/index/02 #R/R可视化 #R/R数据科学 #其他/答粉丝问题
前言
最近希望画一幅图:
这不就是带背景的ggplot吗?
解析知识点
有的小朋友可能会说,这不就是个背景吗?在[[57-R可视化6-ggplot2三部曲最终之进阶为菜鸟]] 中我也提到过主题中的panel.background 参数,比如下图:
但是,它并不能让我们满意的生成不同的背景颜色,尤其是,最好可以根据不同的组别,定制这个背景颜色内容。
又是你,多个图层映射
之前我们提到过[[77-R可视化13-多个ggplot图象映射实现以假乱真的dodge stack效果]],这里其实可以利用geom_rect 这个图层。参见:R 数据可视化 —— ggplot 色块图 - 简书 (jianshu.com)[1]
这里需要强调一下rect 的aes 图层需要接受四个参数作为映射,这里我们仅仅通过自己的判断,将数值进行选择:
代码语言:javascript复制aes(xmin = 4.5, xmax = 9.5,
ymin = -Inf, ymax = Inf)
不难看出,这种柱状图其实是一个分类数据(x轴)的展示:
因为考虑到geom_rect 图层主要运用在连续数据的展示(比如时间序列曲线):
而如果是分类数据结合连续数据(对不同图层不同data)会导致报错,而如果直接对一个分类数据调整geom_rect 则会非常的怪异。
因此这里我们的假数据实际是一个连续数据:
代码语言:javascript复制my_data2 <- data.frame(
counts = runif(10, -1, 10),
id = 0:9,
type = rep(c("a","b"), each = 5)
)
代码语言:javascript复制ggplot() geom_col(data = my_data2, aes(id, counts), fill = "red")
调整x 轴标记,以假乱真
主要是之前的[[86-R可视化18-自定义分类或连续数据坐标轴文本]] 中的知识点:
代码语言:javascript复制scale_x_continuous(breaks=seq(0,9,1),
expand=c(0,0),
label = paste0("GSE", "00", 0:9))
加上rect 图层
接下来指定多个图层映射,就可以出图了:
代码语言:javascript复制p1 <- ggplot() geom_rect(data = my_data2,aes(xmin = -.5, xmax = 4.5,
ymin = -Inf, ymax = Inf),fill = "blue", alpha=0.03)
geom_rect(data = my_data2, aes(xmin = 4.5, xmax = 9.5,
ymin = -Inf, ymax = Inf),fill = "red", alpha=0.03)
geom_col(data = my_data2, aes(id, counts), fill = "red") labs(x = NULL)
scale_x_continuous(breaks=seq(0,9,1),
expand=c(0,0),
label = paste0("GSE", "00", 0:9))
scale_y_continuous(expand=c(0,0), limits = c(-2,10))
theme(axis.text.x = element_text(angle = 90, size = 12))
p1
再加个注释柱子
其实这里有些超纲了,因此仅仅贴上代码,以后再说:
代码语言:javascript复制p2 <- ggplot(data = my_data2) geom_tile(aes(id, 1, fill = type), alpha = 0.3)
theme(panel.grid = element_blank(),
panel.background = element_blank(), axis.line = element_blank(),
axis.ticks = element_blank(), axis.text = element_blank(),
axis.title = element_blank(),
legend.position = "none") scale_fill_manual(values = c("blue", "red"))
geom_text(x= 2, y=1, label="normal")
geom_text(x = 7, y = 1, label = "tumor")
p2
p1 %>% insert_bottom(p2, height = .1)
参考资料
[1]R 数据可视化 —— ggplot 色块图 - 简书 (jianshu.com): https://www.jianshu.com/p/89cdafdb082a