分面弄乱了热图中的值标签(ggplot2)
Faceting messes up value labels in heatmap (ggplot2)
我正在使用 ggplot2 制作热图。我想将值本身放在热图框内,但我发现虽然在不分面时工作正常,但一旦我分面,数字就会进入所有错误的方框 - 见附图。关于如何在分面时使数字留在正确的框中的任何提示?
此外,还有其他一些小问题:如何在不刻面时和不刻面时更改图块尺寸;更改框中值文本的颜色(<- 尝试了明显的解决方案但似乎不起作用...)
谢谢大家!
代码(可以看到切面被注释掉的地方):
fpdata<-read.csv("fp.csv",header=T)
fpdata$Dimension=factor(fpdata$Dimension,levels(fpdata$Dimension)[c(4,1,3,2,5)])
fpdata$Trait=factor(fpdata$Trait,levels(fpdata$Trait)[c(22,15,16,3,4,9,21,20,10,14,6,2,1,
13,8,11,12,17,24,25,18,5,23,19,7)])
matrix <- melt(fpdata)
matrix
matrix$value[is.na(matrix$value)] <- 2
matrix
p3 <- ggplot(data = matrix, aes(variable, Trait, fill = value))+
geom_tile(color = "white")+
scale_fill_gradient2(low = "blue", high = "firebrick", mid = "deepskyblue",
midpoint = 0.6, limit = c(0.6,1), space = "Lab",
name="Factor Loadings")+labs(x = "Reduction #")+
geom_text(aes(label=ifelse(matrix$value<2,matrix$value," ")))
##+facet_grid(~Dimension, scale="free")
p3 <- p3 +
theme (axis.title.x = element_text(size=20),
axis.title.y = element_text(size=20),
axis.text.x = element_text(angle = 0, vjust = 1, size = 14, hjust = 0.5),
axis.text.y = element_text(size=16),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.title = element_text(size=16),
legend.text = element_text(size=14),
strip.text.x = element_text(size=13, face="bold"))+coord_fixed()
p3
没有 Facet 的热图
带 Facet 的热图
df <- data.frame(trait = sample(letters, 15),
dimension = rep(LETTERS[1:5], 3),
variable = paste0('R', 1:3),
value = runif(15))
ggplot(df, aes(variable, trait, fill = value)) +
geom_tile(aes(fill = ifelse(value > 0.25, value, NA))) +
geom_text(aes(label = ifelse(value > 0.25, round(value, 2), NA))) +
facet_grid(~dimension, scales = 'free')
可重现的例子我希望能在某种程度上反映你的数据。如上所述,在这种情况下,值已在您的输入 (df$value) 中定义。所以你可以直接将它作为一个裸(不带引号)符号来引用。
我正在使用 ggplot2 制作热图。我想将值本身放在热图框内,但我发现虽然在不分面时工作正常,但一旦我分面,数字就会进入所有错误的方框 - 见附图。关于如何在分面时使数字留在正确的框中的任何提示?
此外,还有其他一些小问题:如何在不刻面时和不刻面时更改图块尺寸;更改框中值文本的颜色(<- 尝试了明显的解决方案但似乎不起作用...)
谢谢大家!
代码(可以看到切面被注释掉的地方):
fpdata<-read.csv("fp.csv",header=T)
fpdata$Dimension=factor(fpdata$Dimension,levels(fpdata$Dimension)[c(4,1,3,2,5)])
fpdata$Trait=factor(fpdata$Trait,levels(fpdata$Trait)[c(22,15,16,3,4,9,21,20,10,14,6,2,1,
13,8,11,12,17,24,25,18,5,23,19,7)])
matrix <- melt(fpdata)
matrix
matrix$value[is.na(matrix$value)] <- 2
matrix
p3 <- ggplot(data = matrix, aes(variable, Trait, fill = value))+
geom_tile(color = "white")+
scale_fill_gradient2(low = "blue", high = "firebrick", mid = "deepskyblue",
midpoint = 0.6, limit = c(0.6,1), space = "Lab",
name="Factor Loadings")+labs(x = "Reduction #")+
geom_text(aes(label=ifelse(matrix$value<2,matrix$value," ")))
##+facet_grid(~Dimension, scale="free")
p3 <- p3 +
theme (axis.title.x = element_text(size=20),
axis.title.y = element_text(size=20),
axis.text.x = element_text(angle = 0, vjust = 1, size = 14, hjust = 0.5),
axis.text.y = element_text(size=16),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.title = element_text(size=16),
legend.text = element_text(size=14),
strip.text.x = element_text(size=13, face="bold"))+coord_fixed()
p3
没有 Facet 的热图
带 Facet 的热图
df <- data.frame(trait = sample(letters, 15),
dimension = rep(LETTERS[1:5], 3),
variable = paste0('R', 1:3),
value = runif(15))
ggplot(df, aes(variable, trait, fill = value)) +
geom_tile(aes(fill = ifelse(value > 0.25, value, NA))) +
geom_text(aes(label = ifelse(value > 0.25, round(value, 2), NA))) +
facet_grid(~dimension, scales = 'free')
可重现的例子我希望能在某种程度上反映你的数据。如上所述,在这种情况下,值已在您的输入 (df$value) 中定义。所以你可以直接将它作为一个裸(不带引号)符号来引用。