Nature图表复现|热图叠加折线图

2023-10-24 14:04:08 浏览数 (2)

欢迎关注R语言数据分析指南

论文

原图

加载R包

代码语言:javascript复制
library(tidyverse) 
library(cowplot)  

导入数据

代码语言:javascript复制
df <- read_tsv("group.xls")

绘制热图

代码语言:javascript复制
heatmap <- df %>% 
  pivot_longer(-cluster) %>%  # 将数据从宽格式转换为长格式,除了"cluster"列
  separate(`name`, into = "name", sep = "-") %>%  # 将"name"列根据"-"分隔成新的列
  ggplot(aes(name, cluster, fill = value))    # 使用ggplot绘图,设置映射
  geom_tile()    # 添加瓷砖图层,用于绘制热图
  scale_y_discrete(position = "right")    # 设置y轴刻度位置
  scale_x_discrete(limits = c("Epipelagic", "Mesopelagic", "Deep"))    # 设置x轴刻度顺序
  scale_fill_gradientn(colours = rev(RColorBrewer::brewer.pal(11, "RdBu")))    # 设置颜色渐变
  theme(  # 设置主题
    panel.background = element_blank(),  # 设置面板背景为空
    plot.background = element_blank(),  # 设置绘图背景为空
    legend.background = element_blank(),  # 设置图例背景为空
    plot.margin = margin(20, 200, 20, 20),  # 设置绘图边距
    axis.title = element_blank(),  # 设置轴标题为空
    axis.ticks = element_blank(),  # 设置轴刻度为空
    axis.text.x = element_text(angle = 45, color = "black", vjust = 1, hjust = 1),  # 设置x轴文字样式
    legend.position = c(3, 0.8),  # 设置图例位置
    legend.title = element_blank()  # 设置图例标题为空
  )

绘制线图

代码语言:javascript复制
line <- read_tsv("type.xls") %>% 
  ggplot(aes(x = type, y = len, group = cluster, color = group))    # 使用ggplot绘图,设置映射
  geom_line()    # 添加线图层
  geom_point(size = 2)    # 添加点图层,设置点的大小
  geom_text(aes(label = text), nudge_x = 0.08)    # 添加文本图层,设置文本偏移
  scale_x_discrete(limits = c("tVCs", "Hodts"))    # 设置x轴刻度顺序
  scale_color_brewer(palette = "Paired")    # 设置颜色
  theme(  # 设置主题
    plot.margin = margin(2, 2, 2, 0),  # 设置绘图边距
    plot.background = element_blank(),  # 设置绘图背景为空
    panel.background = element_blank(),  # 设置面板背景为空
    legend.position = "none",  # 设置图例位置为无
    panel.grid.major = element_blank(),  # 设置主网格为空
    panel.grid.minor = element_blank(),  # 设置次网格为空
    axis.text.y = element_blank(),  # 设置y轴文字为空
    axis.text.x = element_text(color = "black", face = "bold"),  # 设置x轴文字样式
    axis.title = element_blank(),  # 设置轴标题为空
    axis.ticks = element_blank()  # 设置轴刻度为空
  )

拼图

代码语言:javascript复制
plot <- heatmap %>% ggdraw()  
  draw_plot(line, scale = 0.93, x = 0.12, y = 0.023)  # 添加线图到热图上

图形导出

代码语言:javascript复制
ggsave(plot, file = "heatmap.pdf", width = 4.59, height = 8.33, dpi = 300)  # 设置文件名、尺寸和分辨率

0 人点赞