图中的条件轨迹R ggplot2

时间:2016-09-20 11:25:36

标签: r plot ggplot2

我正在使用'闪亮'来创建一个绘制一些数据的应用程序,主要情节有8个不同的轨道,名称是 -

  

102G长,102G短,103G长,103G短,102G热,103G热,102G热量,103G热量。

长/短曲目应该是可选的(有一个单选按钮可以隐藏它们)

该图是一个facet网格,所以我只是从data.frame中删除与用户决定隐藏的轨道相关的所有数据,(当然我保留了数据,我有2个副本而且只更改了一个它们会自动删除轨道,问题是如果我删除了两个长轨道或两个短轨道,我会收到此错误 -

  

美学必须是长度1或与数据(1)相同:x,y,xend,yend,size,color

我认为问题在于,当我设计'设计'这样的不同曲目时 -

ggplot(seg) + facet_grid(id~chr) + 
  geom_rect(data=subset(seg,grepl("heat$",id)),
            mapping=aes(xmin=start,ymin=0,xmax=end,ymax=log2,fill=xlog2)) +
  geom_segment(data=subset(seg,!grepl("heat$",seg$id) & !grepl("short$",seg$id) & !grepl("long$",seg$id)),
               mapping=aes(x=start,xend=end,y=log2,yend=log2,log2>0,color=log2>0)) +
  geom_segment(data=subset(seg,grepl("short$",id)),
               mapping=aes(x=start,xend=end,y=log2,yend=log2,size=3,color=log2>0)) +
  geom_segment(data=subset(seg,grepl("long$",id)),
               mapping=aes(x=start,xend=end,y=log2,yend=log2,size=3,color=log2>0)) +

如果我删除了这两个短片,那么这一行中没有数据 -

geom_segment(data=subset(seg,grepl("short$",id)),
               mapping=aes(x=start,xend=end,y=log2,yend=log2,size=3,color=log2>0)) +

有没有办法将这一行置于一个条件中,这样只有当有一些数据涉及short时才会执行它?或者可能以不同的方式做到这一点?

提前致谢!

1 个答案:

答案 0 :(得分:0)

好的,答案非常简单,我觉得很愚蠢,我只是创建了一个图形对象,并添加了具有条件的对象,就像这样 -

temp_plot <- ggplot(seg) + facet_grid(id~chr) + 
  geom_rect(data=subset(seg,grepl("heat$",id)),
            mapping=aes(xmin=start,ymin=0,xmax=end,ymax=log2,fill=xlog2)) +
  geom_segment(data=subset(seg,!grepl("heat$",seg$id) & !grepl("short$",seg$id) & !grepl("long$",seg$id)),
               mapping=aes(x=start,xend=end,y=log2,yend=log2,log2>0,color=log2>0))
if(!("102G-short" %in% input$hide_tracks & "103G-short" %in% input$hide_tracks)) {
  temp_plot <- temp_plot + geom_segment(data=subset(seg,grepl("short$",id)),
                                        mapping=aes(x=start,xend=end,y=log2,yend=log2,size=3,color=log2>0))
}

if(!("102G-long" %in% input$hide_tracks & "103G-long" %in% input$hide_tracks)) {
  temp_plot <- temp_plot + geom_segment(data=subset(seg,grepl("long$",id)),
                                        mapping=aes(x=start,xend=end,y=log2,yend=log2,size=3,color=log2>0))
}
temp_plot <- temp_plot + scale_fill_gradient2(limits=c(-3,3),low="darkblue",mid="white",high="darkred",na.value="white",midpoint=0) +
  scale_color_manual(values=c("blue","red")) +
  theme(panel.background=element_rect(fill="white")) +
  theme(legend.position = "none") +
  theme(strip.text.x = element_text(size = 12)) +
  theme(strip.text.y = element_text(size = 12)) +
  ylab("") + 
  ylim(c(-2,2)) +
  coord_cartesian(xlim = ranges$x, ylim = ranges$y)
temp_plot