R : 冲击图

发布时间 2023-10-21 11:00:49作者: 王哲MGG_AI

学习的源头在上图,自己稍微做了点修改

library(reshape2) # 重塑数据框的包,可以实现长数据和宽数据之间的转化
# 加载ggalluvial包(绘图本图所用关键R包),基于ggplot2的ggalluvial包可用来绘制冲击图
library(ggalluvial)
library(ggsci) # ggsci包含期刊或软件的经典配色,可用于ggplot2()配色
setwd("C:\\Users\\Administrator\\Desktop")
# 读取绘制数据,行为菌的名称,列为不同盐度,表中数据为菌的相对丰度
d1e0 <- read.table("ProClass.txt", sep = "\t", header = TRUE) # 示例数据可在GitHub上获取

# 将宽数据拉长,转化后"自变量"列为variable,代表梯度不同的盐度,"因变量"列为Value,代表菌的相对丰度
d1e = as.data.frame(melt(d1e0, id.vars = c("Phylum"))) # id.vars=c()用于指定要保留的字段


# 预设渐变色并绘制冲击图
taxcol <- c("#64A4CC", "#9CCEE3", "#C7E5DB", "#ECF6C8", "#FEEDAA",
            "#FDC980", "#F89D59", "#E75B3A", "#D7191C")
p1e <- ggplot(data=d1e,aes(x = variable, y = value, alluvium = Phylum)) + 
  geom_alluvium(aes(fill = Phylum), alpha = 1) +
  scale_fill_manual(values = taxcol) + 
  scale_x_discrete(breaks = c("B1W4_3", "B1W6_3", "B1W8_3", "B1W10_3"), 
                   labels = c("W4", "W6", "W8", "W10")) + 
  theme_minimal() + 
  theme(panel.grid.minor = element_blank(),
        panel.grid.major = element_blank(),
        axis.ticks.x = element_line(color = "black", size = 0.5), # 调整刻度线的颜色和大小
        axis.ticks.length = unit(0.3, "cm"), # 调整刻度线长度
        plot.margin = unit(c(1 , 1, 1, 1), "cm")) + # 调整整个图形的边距
  xlab("Growth and development period") +
  ylab("Relative abundance (%)")

p1e
ggsave("冲击图.pdf", p1e, width = 8, height = 5)
  1. library(reshape2): 加载reshape2包,这个包提供了一些函数,用于重塑数据框,例如将宽数据转换为长数据。

  2. library(ggalluvial): 加载ggalluvial包,它是基于ggplot2的,主要用于绘制冲击图(Alluvial diagrams)。

  3. library(ggsci): 加载ggsci包。这个包提供了一系列的配色方案,这些配色方案来自于各种知名的学术期刊和软件。

  4. setwd("C:\\Users\\Administrator\\Desktop"): 设置工作目录为桌面。

  5. d1e0 <- read.table("ProClass.txt", sep = "\t", header = TRUE): 从桌面读取一个名为"ProClass.txt"的文件,该文件中的字段是用制表符(tab)分隔的,并且文件具有标题行。

  6. d1e = as.data.frame(melt(d1e0, id.vars = c("Phylum"))): 使用melt函数将宽数据d1e0转化为长数据。这里保持"Phylum"列不变,其它的列都会被转换为两列,一列名为"variable",一列名为"value"。

  7. taxcol部分定义了一个颜色向量。

  8. p1e <- ggplot(...): 使用ggplot函数创建一个图形对象p1e

    • data=d1e:使用前面转化后的数据d1e
    • aes(x = variable, y = value, alluvium = Phylum): 映射数据的字段到图形的各个元素。
    • geom_alluvium(aes(fill = Phylum), alpha = 1): 添加冲击层到图,使用"Phylum"列的值来决定其填充颜色。
    • scale_fill_manual(values = taxcol): 手动设置填充颜色。
    • scale_x_discrete(...): 对x轴进行调整。
    • theme_minimal(): 使用简洁的主题。
    • 后面的theme(...)函数进一步自定义了图形的各种元素,例如网格线、刻度线的颜色、大小等。
    • xlab(...)ylab(...)函数分别设置x轴和y轴的标签。
  9. p1e: 这一行代码将会打印并展示图形。

  10. ggsave("冲击图.pdf", p1e, width = 8, height = 5): 使用ggsave函数将图形保存为PDF文件,文件名为"冲击图.pdf",指定了图形的宽和高。