热图仅显示每隔一行的名称

Heatmap only displays every other row name

我使用 heatmap.2 来显示随着时间的推移非洲国家的国家所有权份额。但是,热图显示 仅每秒 个国家/地区名称作为标签。我想确保每一列(国家名称)都显示为热图上的行标签。这是重现数据集样本的代码:

DF <- structure(list(year = 2000:2004, Djibouti = c(1, 1, 1, 1, 1), 
    Eritrea = c(1, 1, 1, 1, 1), Ethiopia = c(1, 1, 1, 1, 1), 
    Swaziland = c(1, 1, 1, 1, 1), Namibia = c(1, 1, 1, 1, 1), 
    `Equatorial Guinea` = c(1, 1, 1, 1, 1), Libya = c(NA_real_, 
    NA_real_, NA_real_, NA_real_, NA_real_), Mozambique = c(1, 
    1, 1, 0.666666666666667, 0.666666666666667), Tunisia = c(1, 
    1, 0.5, 0.5, 0.5), Botswana = c(0.333333333333333, 0.333333333333333, 
    0.333333333333333, 0.333333333333333, 0.666666666666667), 
    Gambia = c(1, 1, 1, 1, 1), Angola = c(1, 0.5, 0.5, 0.666666666666667, 
    0.666666666666667), Togo = c(0.5, 0.5, 0.5, 0.5, 0.5), Chad = c(0.666666666666667, 
    0.666666666666667, 0.666666666666667, 0.333333333333333, 
    0.333333333333333), Algeria = c(NA, NA, 0, 0.5, 0.333333333333333
    ), Zimbabwe = c(0.333333333333333, 0.333333333333333, 0.333333333333333, 
    0.333333333333333, 0.333333333333333), Mali = c(1, 1, 1, 
    0.5, 0.5), Liberia = c(1, 0.5, 0.5, 0.5, 0.25), Cameroon = c(0.333333333333333, 
    0.333333333333333, 0.333333333333333, 0.333333333333333, 
    0.333333333333333), Kenya = c(0.666666666666667, 0.666666666666667, 
    0.666666666666667, 0.666666666666667, 0.666666666666667), 
    `Central African Republic` = c(0.5, 0.5, 0.5, 0.5, 0.25), 
    Zambia = c(0.333333333333333, 0.333333333333333, 0.333333333333333, 
    0.333333333333333, 0.333333333333333), Egypt = c(0.333333333333333, 
    0.333333333333333, 0.333333333333333, 0.333333333333333, 
    0.333333333333333), `Sierra Leone` = c(0.5, 0.333333333333333, 
    0.333333333333333, 0.333333333333333, 0.333333333333333), 
    `Congo Brazzaville` = c(0.333333333333333, 0.333333333333333, 
    0.333333333333333, 0.333333333333333, 0.333333333333333), 
    Tanzania = c(0.333333333333333, 0.333333333333333, 0.333333333333333, 
    0.4, 0.4), Burundi = c(0.333333333333333, 0.333333333333333, 
    0.333333333333333, 0.25, 0.25), Benin = c(0.333333333333333, 
    0.333333333333333, 0.25, 0.25, 0.25), Nigeria = c(1, 0.333333333333333, 
    0.333333333333333, 0.25, 0.25), `South Africa` = c(0.25, 
    0.25, 0.25, 0, 0), `Congo Kinshasa` = c(0.333333333333333, 
    0.25, 0.2, 0.2, 0.2), Ghana = c(0.333333333333333, 0.333333333333333, 
    0.333333333333333, 0.333333333333333, 0.333333333333333), 
    Morocco = c(0.5, 0.5, 0.5, 0.5, 0.5), Niger = c(0.5, 0, 0, 
    0, 0), Rwanda = c(0.5, 0.5, 0, 0.5, 0.5), `Guinea-Bissau` = c(0, 
    0, 0, 0, 0), `Burkina Faso` = c(0.5, 0.333333333333333, 0.333333333333333, 
    0.333333333333333, 0.333333333333333), Malawi = c(0.333333333333333, 
    0.333333333333333, 0.333333333333333, 0.333333333333333, 
    0.333333333333333), Gabon = c(0, 0, 0.333333333333333, 0.333333333333333, 
    0.333333333333333), Madagascar = c(0.333333333333333, 0.333333333333333, 
    0.333333333333333, 0.333333333333333, 0), Guinea = c(0, 0, 
    0, 0, 0), Lesotho = c(0.5, 0, 0, 0, 0), Mauritania = c(0.5, 
    0, 0, 0, 0), `South Sudan` = c(NA_real_, NA_real_, NA_real_, 
    NA_real_, NA_real_), `Ivory Coast` = c(0, 0, 0, 0, 0), Senegal = c(0, 
    0, 0, 0, 0), Somalia = c(0, 0, 0, 0, 0), Sudan = c(0, 0, 
    0, 0, 0), Uganda = c(0, 0, 0, 0, 0)), row.names = c(NA, 5L
), class = "data.frame")

这是热图的代码:

rev.heat.colors <- function(n) rev(heat.colors(n))

DF<-DF[, order(colSums(-DF, na.rm=T))]
heatmap.2(as.matrix(t(DF[2:50])),trace = "none",  
          Rowv=NULL, 
          Colv=NULL, dendrogram="none",
          labCol=DF$year,labRow=colnames(DF[c(2:50)]),
          cexRow = 0.7,
          cexCol =  0.7,
          lhei=c(0.25,1), lwid=c(0.25,1), margins=c(3,6),
          colsep=1:16, rowsep=1:50, sepcolor="white",
          col="rev.heat.colors")

即使我指定所有国家/地区名称 (DF[c(2:50]) 都应用作行名称,但仅每隔一个名称出现一次。

如有任何帮助,我将不胜感激!

您是否考虑过使用 ggplot 而不是 heatmap.2? 使用 geom_tile

可能更容易影响输出的外观

这是一个例子:

require(tidyverse)
require(ggplot2)

DF %>% 
  gather(country,value,-year) %>%
  ggplot(aes(x = factor(year), y = factor(country, levels = rev(names(DF))), fill = value)) +
  geom_tile(color = "white") +
  scale_fill_gradient(low = "yellow", high = "red") +
  labs(x = "year", y = "country")