R实用绘图系列主要是带领大家绘制一些实用、好看而又不太复杂的科研常用图形,主打一个实用,该系列会持续更新,有需要的小伙伴赶紧关注起来吧。
那我们就正式开始啦。
说明
今天带领大家绘制的是色块图,色块图通过颜色的差异来反映数值的大小,能够直观地展示数据的模式、趋势和关联性,适用于呈现矩阵数据、时间序列数据等多种数据类型。
色块图没有用到其他的绘图包,只用到了ggplot2包中的geom_tile()函数,除了geom_tile()之外,ggplot2中绘制色块图的函数还有geom_rect()、geom_raster()。三个函数的差异如下:
geom_tile()
采用x, y, width, height
参数控制色块位置和大小,其中x、y指定色块中心位置坐标,width、height指定色块的宽和高。geom_rect()
采用xmin, xmax, ymin, ymax
参数控制色块四个角的位置。geom_raster()
是只能在所有色块的规格都一样的情况下使用,绘图速度会比前两个快。
除了这些差异之外,三个函数的作用和用法几乎相同。
加载包
# 加载包
library(reshape)
library(ggplot2)
数据准备
# 创建数据
set.seed(8)
m <- matrix(round(rnorm(120), 2), 15,8)
colnames(m) <- paste0("Row", 1:8)
rownames(m) <- paste0("Col", 1:15)
df <- melt(m)
colnames(df) <- c("x", "y", "value")
df$pvalue <- runif(120, 0, 0.5)
创造示例数据如图所示,x为列名,y为行名,value是x与y之间对应的数值大小,可以是相关系数值等。pvalue是显著性值,也可以是其他你想要通过设定阈值来添加特定标记的值。
绘图1:反映数值大小
# 反映数值大小
ggplot(df, aes(x = x, y = y, fill = value)) +
geom_tile(color = "white", # 设置小格子边框颜色
lwd = 1, # 设置小格子的边框宽度
linetype = 1) + # 设置小格子的边框线型
scale_fill_continuous(low='white',high='#4876FF')+
theme_minimal()+
theme(panel.grid = element_blank())+ # 去除网格线
xlab("")+ # 去除横轴标题
ylab("")+ # 去除纵轴标题
coord_fixed() # 设置x轴与y轴的单位长度相等
ggsave('plot1.pdf',width = 7,height = 4)
绘图2:反映数值大小、正负、显著性
# 反映数值大小、数值正负和显著性
ggplot(df, aes(x = x, y = y, fill = value)) +
geom_tile(
color = "#FAFAFA", # 设置小格子边框颜色
lwd = 0.8, # 设置小格子的边框宽度
linetype = 1) + # 设置小格子的边框线型
scale_fill_gradient2(low = '#619CFF',
mid = 'white',
high = '#F8766D',
midpoint = 0)+ #设置中间颜色对应的数值
geom_text(aes(label = ifelse(pvalue < 0.05, "*","")),
size = 5, # 设置标签文本大小
color = "#696969") + # 设置标签文本颜色
theme_minimal()+
theme(panel.grid = element_blank())+ # 去除网格线
xlab("")+ # 去除横轴标题
ylab("")+ # 去除纵轴标题
coord_fixed() # 设置x轴与y轴的单位长度相等
ggsave('plot2.pdf',width = 7,height = 4)
合集文章
本期的内容就到这里了,喜欢的小伙伴,欢迎点赞、转发、收藏哦!
关注数据之帆,成为一帆的原始粉丝,和一帆一起进步吧!