在ggplot中对标签进行分组

时间:2017-10-05 21:46:50

标签: r plot ggplot2

我尝试使用ggplot2创建热图。

#DATA
set.seed(42)
df1 = data.frame(ID = paste0("I", 1:40),
                 group = rep(c("Dry", "Rain"), each = 20),
                 subgroup = rep(paste0("S", 1:4), each = 10),
                 setNames(data.frame(replicate(8, rnorm(40))), letters[1:8]))
library(reshape2)
df1 = melt(df1, id.vars = c("ID", "group", "subgroup"))
df1 = df1[order(df1$group, df1$subgroup),]
df1$fact = paste(df1$subgroup, df1$ID)
df1$fact = factor(df1$fact, levels = unique(df1$fact))

#PLOT
library(ggplot2)
ggplot(df1, aes(x = variable, y = fact, fill = value)) +
    geom_tile() +
    scale_y_discrete(labels = df1$subgroup[!duplicated(df1$ID)])

情节正是我想要的,除了标签S1S2S3S4各自重复10次。有没有办法只显示一次,然后在S1S2S3S4之间放置一些中断。

enter image description here

我也很好奇是否有办法将group放在情节中subgroup左侧作为辅助y轴,但这是可选的。

1 个答案:

答案 0 :(得分:1)

您可以使用headers来解决在y轴上具有子组指示符和子组之间的空格分隔的问题。

您还可以删除facet_grid中的y轴标签以避免冗余。

theme

注意:ggplot(df1, aes(x = variable, y = fact, fill = value)) + geom_tile() + facet_grid(subgroup~., scales="free_y") + theme(axis.text.y = element_blank()) 是必要的,因为scales="free_y"在子组之间不相同,如果此参数不存在,请参阅输出。

enter image description here