rm(list = ls()) setwd("C:/Rdate") getwd() library(ggplot2) library(dplyr) library(tidyr) library(tibble) library(pheatmap) # 读取数据(确保无额外处理) data <- read.csv("ko00250.csv", header = TRUE, row.names = 1, sep = ",") # ------------------------------- # 步骤1:按行Z-score标准化(保留NA) # ------------------------------- data_normalized <- t(scale(t(data))) # 允许保留NA # 检查缺失值和标准化结果 print(paste("缺失值数量:", sum(is.na(data_normalized)))) print(paste("手动标准化数据范围:", round(range(data_normalized, na.rm = TRUE), 2))) # ------------------------------- # 步骤2:获取pheatmap行列顺序 # ------------------------------- p <- pheatmap( data, scale = "row", cluster_cols = FALSE, cluster_rows = FALSE, silent = TRUE ) p_row_order <- rownames(p$matrix) p_col_order <- colnames(p$matrix) # ------------------------------- # 步骤3:转换数据并严格匹配顺序 # ------------------------------- df <- data_normalized %>% as.data.frame() %>% rownames_to_column("Row") %>% pivot_longer( cols = -Row, names_to = "Col", values_to = "Value", values_drop_na = FALSE ) %>% mutate( Row = factor(Row, levels = p_row_order), Col = factor(Col, levels = p_col_order) ) # ------------------------------- # 步骤4:绘制热图 # ------------------------------- ggplot(df, aes(x = Col, y = Row, fill = Value)) + geom_point( shape = 21, size = 9, color = "#c0c7c2", stroke = 0.8, na.rm = FALSE # 允许绘制NA ) + scale_fill_gradient2( low = "#619f4d", mid = "#fdfffe", high = "#d76b50", midpoint = 0, limits = c(-2, 2), breaks = c(-2, -1, 0, 1, 2), na.value = "grey80", oob = scales::squish ) + theme_minimal() + theme( axis.text.x = element_text(angle = 45, hjust = 1, size = 8), axis.text.y = element_text(size = 8), panel.grid = element_blank(), aspect.ratio = nrow(data)/ncol(data), legend.position = "right", legend.key.height = unit(1.5, "cm") ) + labs(x = NULL, y = NULL, fill = "Z-score") # 保存 ggsave("heatmap_normalized.png", width = 10, hei
时间: 2025-03-08 20:02:55 浏览: 111
<think>好的,我需要帮助用户解决在R语言中处理数据并生成热图的问题。首先,用户的需求包括读取CSV文件、数据标准化、生成热图以及保存图像。我需要一步步来思考每个步骤的实现方法。
首先,读取CSV文件。在R中,常用的函数是read.csv(),但用户提到使用pandas的示例,可能需要确认路径是否正确。另外,用户可能需要处理一些编码问题,但示例中没有提到,所以暂时先忽略。不过,用户示例中用了engine='python',可能在R中不需要,直接用read.csv应该可以。
接下来是数据标准化。用户要求行方向的Z-score标准化,也就是对每一行进行标准化。通常Z-score是按列(变量)标准化,行的话可能需要转置。比如,对矩阵的每一行,计算该行的均值标准差,然后标准化。R中可以用scale函数,但scale默认是按列,所以可能需要先转置数据,标准化后再转置回来。比如,t(scale(t(data_matrix), center=TRUE, scale=TRUE))。需要注意数据是否为数值型,非数值列需要先排除。
然后是生成热图。用户提到使用ggplot2和pheatmap。ggplot2的话,需要将数据转换为长格式,使用geom_tile。而pheatmap包可能更直接,适合生成热图,并且可以自定义聚类、颜色等。用户可能需要比较两者的不同方法,或者选择其中一个。需要提醒安装必要的包,如ggplot2、pheatmap、tidyr、dplyr等。
保存图像的话,R中通常用ggsave()保存ggplot2的图像,或者用pheatmap的save参数,或者用png()和dev.off()的组合。需要提供不同方法的示例,并说明如何调整分辨率和尺寸。
现在需要检查每个步骤的代码是否正确。例如,读取CSV是否正确处理路径,标准化是否正确应用在行上,热图生成是否无误,保存是否路径正确。
可能需要注意的问题:数据中是否有非数值列,需要先去除;标准化时是否有NA值;热图的颜色调整;图像保存的格式和参数设置。
最后,生成相关问题,可能需要围绕数据处理的其他步骤,如数据清洗、其他标准化方法、可视化调整等。</think>以下是R语言实现数据读取、标准化、热图生成及保存的详细步骤:
### 1. 读取CSV文件
```r
# 安装必要包(若未安装)
# install.packages(c("readr", "dplyr", "ggplot2", "pheatmap"))
library(readr)
data <- read_csv("D:/path/to/your/listings.csv") # 注意路径斜杆方向
```
### 2. 行Z-score标准化
```r
# 提取数值型数据列
numeric_data <- data %>% select(where(is.numeric))
# 行标准化函数
row_zscore <- function(x) {
t(scale(t(as.matrix(x)), center = TRUE, scale = TRUE))
}
standardized_data <- row_zscore(numeric_data)
```
### 3. 生成热图(两种方法)
**方法一:使用pheatmap**
```r
library(pheatmap)
pheatmap(standardized_data,
color = colorRampPalette(c("navy", "white", "firebrick"))(100),
show_rownames = FALSE,
clustering_method = "complete")
```
**方法二:使用ggplot2**
```r
library(ggplot2)
library(tidyr)
standardized_data %>%
as.data.frame() %>%
mutate(row = row_number()) %>%
pivot_longer(-row) %>%
ggplot(aes(x=name, y=row, fill=value)) +
geom_tile() +
scale_fill_gradient2(low="blue", mid="white", high="red") +
theme(axis.text.x = element_text(angle=45, hjust=1))
```
### 4. 保存图像
```r
# pheatmap保存
p <- pheatmap(standardized_data)
save_pheatmap_png <- function(x, filename, width=1200, height=800) {
png(filename, width, height)
grid::grid.newpage()
grid::grid.draw(x$gtable)
dev.off()
}
save_pheatmap_png(p, "heatmap.png")
# ggplot2保存
ggsave("ggplot_heatmap.png", plot = last_plot(),
width = 10, height = 8, dpi = 300)
```
注意事项:
1. 数据路径需替换为实际路径
2. 标准化前建议处理缺失值
3. 热图颜色参数可自定义调整
4. 图像分辨率通过`dpi`参数控制[^1]
阅读全文
相关推荐















