使用geom_tile,我想在每行数据之间放一条水平线。看来如果我在美学中使用颜色,它会在水平和垂直方向放置线条,这不是我想要的。在过去,我刚刚使瓷砖的高度变小,因此它们之间存在一些分离。但是,似乎空间的数量因行而异?为什么这样,是否有办法使分离始终如一?
library(ggplot2)
gn <- c(rep("gn1", 5), rep("gn2", 5), rep("gn3", 5), rep("gn4", 5), rep("gn5", 5),
rep("gn6", 5), rep("gn7", 5), rep("gn8", 5), rep("gn9", 5), rep("gn10", 5),
rep("gn11", 5), rep("gn12", 5), rep("gn13", 5), rep("gn14", 5), rep("gn15", 5),
rep("gn16", 5), rep("gn17", 5), rep("gn18", 5), rep("gn19", 5))
smpl <- rep(c("smpl1", "smpl2", "smpl3", "smpl4", "smpl5"), 19)
mut1 <- c(0, 2, 3, 3, 0)
mut2 <- c(0, 2, 2, 0, 3)
mut3 <- c(2, 0, 2, 0, 3)
mut4 <- c(0, 0, 2, 2, 3)
mut5 <- c(0, 2, 3, 3, 2)
mut <- c(mut1, mut2, mut3, mut4, mut5, mut2, mut3, mut1, mut4, mut2,
mut5, mut1, mut4, mut5, mut5, mut1, mut3, mut1, mut4)
mut <- factor(mut, levels=c(0,2,3))
tst <- data.frame(gn=gn, smpl=smpl, mut=mut)
ggplot(tst, aes(x=smpl, y=gn, fill=mut, height=0.95)) +
geom_tile() +
guides(fill=F) +
ylab("Genes") +
xlab("Sample") +
scale_fill_manual(values=c("#FFFFFF", "#00BFC4", "#F8766D")) +
theme(panel.grid.major.y=element_blank()) +
theme(panel.grid.major.x=element_blank()) +
theme(panel.grid.minor.y=element_blank()) +
theme(panel.grid.minor.x=element_blank()) +
theme(panel.background=element_rect(fill="#000000")) +
theme(axis.ticks.x=element_blank(),
axis.text.x=element_blank(),
axis.title.x=element_blank())
答案 0 :(得分:0)
让
n1 <- length(unique(tst$gn))
n2 <- length(unique(tst$smpl))
分别是y和x轴的部分数。然后我们可以利用geom_line
来实现结果:
ggplot(tst) +
geom_tile(aes(x = smpl, y = gn, fill = mut)) + # aes for geom_tile
guides(fill = FALSE) + ylab("Genes") + xlab("Sample") +
scale_fill_manual(values = c("#FFFFFF", "#00BFC4", "#F8766D")) +
theme(panel.grid.major.y = element_blank()) +
theme(panel.grid.major.x = element_blank()) +
theme(panel.grid.minor.y = element_blank()) +
theme(panel.grid.minor.x = element_blank()) +
theme(panel.background = element_rect(fill = "#000000")) +
theme(axis.ticks.x = element_blank(),
axis.text.x = element_blank(),
axis.title.x = element_blank()) +
geom_line(data = data.frame(x = c(0, n2) + 0.5, y = rep(2:n1, each = 2) - 0.5),
aes(x = x, y = y, group = y)) # Horizonal lines