我正在 R 中使用 pheatmap 库。我正在为同一人群的不同时间点创建热图,因此我希望每个热图的图例比例是固定的(从 -2 到 2),以便可以轻松比较它们。然后,超出该范围的值将设置为 -2 或 2 的颜色。
我尝试使用 legend_break 和 Legend_labels 函数设置固定范围,但它只更改图例上的标签,而不更改实际的比例限制本身。
# Set Legend Limits
legend_breaks <- seq(-2, 2, length.out = 21)
legend_labels <- c("-2", rep("", 4), "-1", rep("", 4), "0",rep("", 4),"1",rep("", 4),"2")
# Plot Heat Map
pheatmap(temp_m[,8:ncol(temp_m)],
scale="column",
annotation_colors = ann_colors,
color=colorRampPalette(c("navy", "white", "red"))(20),
main="Temp",
cluster_rows = FALSE,
cluster_cols = FALSE,
show_rownames = FALSE,
gaps_row = gaps,
angle_col = 90,
border_color = "grey",
legend_breaks = legend_breaks,
legend_labels = legend_labels,
annotation_row = rows,
# annotation_legend = TRUE,
# annotation_names_row = TRUE,
fontsize=11, cellwidth=10, cellheight=10)
我刚刚有了一个关于如何在 R 中的 pheatmap 包制作的不同热图中获得相同比例的图例的解决方案。
根据您的情况,您可以尝试添加:
color = colorRampPalette(c("navy", "white", "red"))(20)
breaks = c( -2, -1.8, -1.6, -1.4, -1.2, -1.0, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2)
如果将图例从 -10 缩放到 10,并且颜色数量从 20 增加到 50,则中断中的数字序列的间隔可能为 0.4 (20/50 = 0.4)。重点是,breaks中的序号的个数与颜色的个数相同。
pheatmap(temp_m[,8:ncol(temp_m)],
scale="column",
annotation_colors = ann_colors,
color=color, breaks = breaks
main="Temp",
cluster_rows = FALSE,
cluster_cols = FALSE,
show_rownames = FALSE,
gaps_row = gaps,
angle_col = 90,
border_color = "grey",
legend_breaks = legend_breaks,
legend_labels = legend_labels,
annotation_row = rows,
# annotation_legend = TRUE,
# annotation_names_row = TRUE,
fontsize=11, cellwidth=10, cellheight=10)