瓷片图绘制教程,R语言ggplot2绘图笔记

瓷片图像地板砖一样,由许多个小格子组成,不用的颜色深浅可以用来表示不同的值,横轴和纵轴可以用来展示不同的位置,二维码图、马赛克图、热图等都有异曲同工之妙。

今天分享一个在R语言中利用ggplot2包绘制瓷片图的方法,支持不同分组不同类型等数据合并展示,轻松完成可视化。


在R语言中,geom_tile() 是 ggplot2 包中的一个函数,用于创建瓷砖图,也常被用来制作热图。

这种类型的图表非常适合展示二维数据的矩阵,其中每个瓷砖的颜色可以表示矩阵中对应元素的值。

功能和作用

  • 展示二维数据的分布特征
  • 制作简易热图
  • 多组数据之间相互比较

绘图流程

library(ggplot2)

data <- data.frame(
    Group=c(rep(paste0("G",1:3),100)),
    Class=c(rep(paste0("Class ",1:6),each=50)),
    Pos=c(rep(1:16,each=3),17,18),
    value=runif(300,1,10),
    addtion=1:300
)

下面是代码中每一行的简单解释(右滑查看):
Group=c(rep(paste0("G",1:3),100)): 这一行创建了一个名为 Group 的列。它首先使用 paste0("G", 1:3) 生成字符串 "G1", "G2", 和 "G3"。然后,rep() 函数重复这三个值100次,结果是一个长度为300的向量,每个字符串重复出现100次。
Class=c(rep(paste0("Class ",1:6),each=50)): 这一行创建了一个名为 Class 的列。它生成了六个字符串:"Class 1" 到 "Class 6"。rep(..., each=50) 确保每个字符串重复50次,形成一个长度为300的向量。
Pos=c(rep(1:16,each=3),17,18): 这里创建了一个名为 Pos 的列。rep(1:16, each=3) 表示数字1到16每个重复3次,接着在这个序列的末尾添加了17和18。这将产生一个长度为50(16x3+2)的向量,然后整个向量重复六次(因为 Class 列有6个类别,每个类别50个条目),形成一个长度为300的向量。
value=runif(300,1,10): 这行创建了一个名为 value 的列,包含300个在1到10之间均匀分布的随机数。
addtion=1:300: 最后,这行创建了一个名为 addtion 的列,简单地包含从1到300的整数。

通过以上代码生成一个随机测试数据框,其中包含了分组、分类、位置、值等信息,格式预览如下:

基础框架图

根据上述的数据,先使用两行代码实现最基础的瓷片图:

ggplot(data)+
    geom_tile(aes(x=Pos,y=Group,fill=value))

分面展示图

上图仅展示了一个分组的数据,如果想将不同Class的数据也一起画出来,则需要借助分面功能:

plot <- ggplot(data, aes(x = Pos, y = Group)) + 
    geom_tile(aes(fill = value), colour = "white") +
    scale_fill_gradient(low="white", high="#22a6b3")+ 
    facet_wrap(~ Class, ncol = 1)+
    theme_bw()
plot

此时经过分面后不同Class的数据分开呈现于不同子图,同时修改了颜色的映射值,明显好看一点儿了,但是如果分成一列看起来不协调,使用ncol参数修改为两列,同时在每个色块儿上添加具体的数值,方便查看,效果如下:

修饰结果图

plot <- ggplot(data, aes(x = Pos, y = Group)) +
    geom_tile(aes(fill = value), colour = "white") +
    scale_fill_gradient(low="white", high="#22a6b3") +
    facet_wrap(~ Class, ncol = 2, scales = "free") +
    scale_x_continuous(breaks = seq(0,60,2),expand = c(0, 0))+
    geom_text(aes(label=str_sub(value,1,1)),color='#f1f2f6') +
    theme_classic()+
    theme(
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        strip.background = element_rect(fill = "#ffffff"),
        strip.text = element_text(size = 12, face = "bold"),
        axis.text = element_text(size = 12, color = "black"),
        axis.title = element_text(size = 14, face = "bold"),
        legend.position = "right",
        legend.title = element_text(size = 12),
        legend.text = element_text(size = 10)
    )
plot

增加一些主题美化代码,即可获得如下结果图,数据是随机生成的,没有实际含义,仅提供绘图思路和方法,请您根据实际需要进行修改。

补充知识点

本文中使用的ggplot2绘图系统,主要涉及以下几个关键函数,下面做一些简单是补充说明。

geom_tile

根据tile单词的翻译就能明白,这个函数的功能就是创建瓷片图,也就是色块,本质上是根据数据计算元素的位置和填充颜色,这也是一个非常基础的功能。

scale_fill_gradient

这个函数用于为图表中的元素(如瓷砖图、条形图、箱线图等)设置渐变色填充。
主要用于那些通过颜色表示数值大小的图表,比如热图或某些类型的散点图。

通过指定两种颜色,scale_fill_gradient() 可以创建一个从一种颜色渐变到另一种颜色的效果,这通常用来表示数值数据的范围。

scale_fill_gradient(low = "blue", high = "red")

如果你不喜欢配色,改颜色就用它。

facet_wrap

分面是一个神奇的功能,这个函数用于创建分面(facet)图。分面图是一种数据可视化技术,它允许你将一个大的图表拆分成几个小图表(称为分面),每个小图表展示数据的一个子集。

facet_wrap() 特别适用于当你有一个或多个分类变量,并希望对每个类别单独展示同一图表,以下是一个使用方法示例:

ggplot(data, aes(x = x_variable, y = y_variable)) +
  geom_point() +
  facet_wrap(~ facet_variable, 
  nrow = number_of_rows, 
  ncol = number_of_columns
)

facet_wrap() 是一个非常强大的工具,用于在相同的页面或视图中比较和展示多个数据子集的图表。通过使每个子集的图表保持一致的样式和比例,极大地促进了不同子集之间的直观比较。

本文由mdnice多平台发布

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信分析笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值