前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >87-R可视化19-利用其他图层映射自由的控制背景的颜色

87-R可视化19-利用其他图层映射自由的控制背景的颜色

作者头像
北野茶缸子
发布2022-02-08 15:22:05
4470
发布2022-02-08 15:22:05
举报
  • 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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 北野茶缸子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 解析知识点
  • 又是你,多个图层映射
  • 调整x 轴标记,以假乱真
  • 加上rect 图层
  • 再加个注释柱子
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档