热图仅显示每隔一行的名称
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")
我使用 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")