Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot中的标签分组_R_Plot_Ggplot2 - Fatal编程技术网

R ggplot中的标签分组

R ggplot中的标签分组,r,plot,ggplot2,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

下面是我使用
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)])
除了标签
S1
S2
S3
、和
S4
各重复10次之外,绘图正是我想要的。有没有办法只显示一次,然后在
S1
S2
S3
S4
之间进行某种分隔


我也很好奇,是否有办法将
放在绘图中
子组
的左侧,作为辅助y轴,但这是可选的。

您可以使用
刻面网格
,它可以解决在y轴上有子组指示器和子组之间有空白分隔的问题

您还可以删除
主题中的y轴标签
,以避免冗余

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”
是必需的,因为
fact
在子组中不相同,如果没有此参数,请参阅输出