问:每个瓷砖的facet_wrap比例

时间:2018-03-14 15:31:04

标签: r ggplot2 facet-wrap

我有两种类型的参数和一种化合物的响应:

plotted

用于生成此图片的代码是

    for (i in levels(data$ProteinName))
    {
      temp <- subset(data, data$ProteinName == i)
            plot <- ggplot(data = temp, aes(x= temp$id, y = temp$Matrix))+
              geom_tile( aes( fill= temp$TotalArea))+
              labs(title= i, x = NULL, y = NULL, fill = "Average Total Area")+
              geom_text(aes(label=round(TotalArea, digits = 0)), color = "White")+
              scale_fill_gradientn (colors=c(low = "blue4", mid="gold", high = "red"),
              na.value = "violetred")+
              theme_bw()
       print(plot)
    }

但这是12个情节中的一个,所以对于我的报告我不得不把它带入一个方面,但我还没有找到一种方法来创建一个自由尺度的“z轴”尺度当前代码是

    temp <- data
            plot <- ggplot(data = temp, aes(x= temp$id, y = temp$Matrix))+
              facet_wrap(~temp$ProteinName, scale = "free")+
              geom_tile( aes( fill= temp$TotalArea))+
              labs(title= i, x = NULL, y = NULL, fill = "Average Total Area")+
              geom_text(aes(label=round(TotalArea, digits = 0)), color = "White")+
              scale_fill_gradientn (colors=c(low = "blue4", mid="gold", high = "red"), 
              na.value = "violetred")+
              theme_bw()
       print(plot)

并给出以下内容:

result

但是这里的瓷砖颜色(z轴)是不是自由的,任何人都知道如何创建一个自由的z轴? 你可以在PE面上看到它只是蓝色,但在这个方面,观察到的浓度存在很大差异。

目标是读者可以看到大型响应(红色)和最低(蓝色)是什么。

希望你能帮助我。

1 个答案:

答案 0 :(得分:0)

感谢您的回答,  在帖子的帮助下: Place a legend for each facet_wrap grid in ggplot2 这很简单, 旧剧本是:

for (i in levels(data$ProteinName))
{
  temp <- subset(data, data$ProteinName == i)
        plot <- ggplot(data = temp, aes(x= temp$id, y = temp$Matrix))+
          geom_tile( aes( fill= temp$TotalArea))+
          labs(title= i, x = NULL, y = NULL, fill = "Average Total Area")+
          geom_text(aes(label=round(TotalArea, digits = 0)), color = "White")+
          scale_fill_gradientn (colors=c(low = "blue4", mid="gold", high = "red"),
          na.value = "violetred")+
          theme_bw()
   print(plot)
}

结果: old plot

之后我们使用gridextra包中的fucntion grid.arrange(grobs = list_of_plots)更新了脚本 因为我必须在循环中创建一个列表,这是通过:plot_v[[i]] <- plot完成的,plot_v是绘图列表的名称。

然后将此列表添加到网格排列

所以新脚本现在是

    require(gridExtra)
    require(ggplot2)    
plot_v <- list()
        for (i in levels(data$ProteinName))
        {
          temp <- subset(data, data$ProteinName == i)
                plot <- ggplot(data = temp, aes(x= temp$id, y = temp$Matrix))+
                  geom_tile( aes( fill= temp$TotalArea))+
                  labs(title= i, x = NULL, y = NULL, fill = "Average Total Area")+
                  geom_text(aes(label=round(TotalArea, digits = 0)), color = "White", size= 2.5)+
                  scale_fill_gradientn (colors=c(low = "blue4", mid="gold", high = "red"),
                     na.value = "violetred")+
                  theme_bw()+
                  guides(fill = "none")
           print(plot)
           assign(paste("plot", i, sep="_"), plot)
           plot_v[[i]] <-  plot
        }
        grid.arrange(grobs = plot_v)

这给出了结果 new plot

我要感谢你的帮助