数据导入
导入数据一般有固定格式,比如最简单的方式:
data <- read.csv("path")
一般“path”表示数据文件的根目录。R语言不会自动在相同目录下找到目标文件,但是可以规定R工作的“桌面”,也就是在某个目录下工作。确定了工作目录之后,即使不使用根目录,可以直接从该目录下导入或者输出文件。
setwd("path")#设置工作路径
如果只输入“path”,表格将会被赋值给data。但是一般的表格的第一列是行名,作为DataFrame的格式,我们希望第一列的数据作为行名出现。只需要加一个参数即可:
data <- read.csv("path",row.names = 1)
此时从普遍意义上已经可以较完整的数据表格了。
热图
首先声明数据格式。第一列为行名,之后几列是该name的所属物的几个属性。如果不做数据处理直接绘图,由于每个属性的值域不同,值域较小的属性列可能会因为值域较大属性列的数值而表现得不明显。随机生成的数据:
Name | 1 | 2 | 3 | 4 | 5 | 6 |
A | 23500 | 0.761 | 0.00012 | 123 | 0.543 | 0.000874 |
B | 54000 | 0.378 | 0.00045 | 987 | 0.00034 | 0.000189 |
C | 67000 | 0.234 | 0.00032 | 321 | 0.000789 | 0.000567 |
D | 41000 | 0.912 | 0.00078 | 456 | 0.000876 | 0.000345 |
E | 32000 | 0.567 | 0.00089 | 645 | 0.000912 | 0.000678 |
F | 78900 | 0.123 | 0.00023 | 567 | 0.000321 | 0.000456 |
G | 98700 | 0.456 | 0.00078 | 234 | 0.000765 | 0.000123 |
H | 45600 | 0.789 | 0.00045 | 876 | 0.000098 | 0.00089 |
所以这里需要用到数据的标准化(标准化可以参考这篇文章),标准化之后得到的图为:
相别于其他作图,热图有自己的包。可以用pheat包或者“ComplexHeatmap”包,后者能实现的功能更多一点,但是下载“ComplexHeatmap”可能会遇到一些问题。如果有问题,可以参考这篇文章。
下面给出源码:
library(ComplexHeatmap)#若未下载包请输入下面三条指令
data<- read.csv("your_path",row.names = 1)#导入数据
data <- as.matrix(data)
samples <- rep(c('Group1', 'Group2'), c(3,3)) #定义样本分组信息
Group = factor(rep(c('Group1', 'Group2'),times = c(3,3)))#分组信息,用于热图分割
Heatmap(
data,
row_names_side = 'right',
column_split = Group, # 分组
show_column_names = FALSE, # 不显示列名
row_names_gp = gpar(fontsize = 5), # 设置行名字体
cluster_rows = FALSE, #不要行聚类
cluster_columns = FALSE #不要列聚类
)
这里如果使用列聚类的话,分组就会收到影响,所以示例只给出行聚类。
cluster_rows = TRUE
降维图
PCA降维
PCA降维也就是主成分分析。具体原理可以参考这篇文章。
PCA绘图实际上就是找到两个主坐标轴,将数据映射到这个坐标系中。下面是我随机生成的数做的示例:
一下是代码:
data <- read.csv("path",row.names = 1)
pca_result <- prcomp(data, center = TRUE, scale. = TRUE)#做pca分析
pca_summary <- summary(pca_result)#汇总
Group = factor(rep(c('Group1', 'Group2'),times = c(5,5)))#分组信息
library(ggplot2)
library(ggdist)
# 提取坐标轴标题
xlab <- paste0("PC1 (", round(pca_summary$importance[2, 1] * 100, 2), "%)")
ylab <- paste0("PC2 (", round(pca_summary$importance[2, 2] * 100, 2), "%)")
# 提取主成分分析的结果
pca_data <- as.data.frame(pca_result$x[, 1:2])
# 合并组别信息
pca_data$Group <- as.factor(Group)
ggplot(pca_data, aes(x = PC1, y = PC2, color = Group)) +
geom_point() + #绘制散点
theme_bw()+ #设置画布主题为黑白色
stat_ellipse(aes(fill = Group),type = "norm",geom = "polygon",alpha = 0.4)+ #添加椭圆
scale_color_manual(values = c("#39c5bb", "pink")) +
scale_fill_manual(values = c("#39c5bb", "pink")) +
labs(title = NULL,
x = xlab,
y = ylab)
stat_ellipse只有在散点数量大于3的情况下才能绘制成功。
还有火柴杆图,气泡图,Zscore图,PCoA降维图和NMDS降维图日后上传,暂存。