2016-09-20 42 views
0

我使用“闪亮”,使绘出一些数据的应用程序,主要情节有8米不同的赛道,有名字是 -有条件的轨道

102G长,102G- 103G长,103G短,102G热,103G命中,102G命中,103G命中。

长/短的轨道应该是可选的(有一个单选按钮隐藏)

情节是一个小网格,所以我只是从data.frame删除所有数据与用户决定隐藏的轨道相关(当然,我保留这些数据,我有2个副本并且只更改其中一个),并且它会自动删除轨道,问题是如果我删除了两个或更长的轨道短的轨道,我得到这个错误 -

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

我认为问题是,当我绘制我“设计”了不同的轨道像这个 -

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)) + 

有没有把此行的状态,所以如果有一些数据指短期将只执行的方法吗?或者用不同的方法来做到这一点?

在此先感谢!

+0

你得到一个错误? ggplot可能会执行正常,如果你传递一个空的data.frame – Nate

+0

就像我写的,我确实得到一个错误 - 美学必须是长度1或相同的数据(1):x,y,xend,yend,size,颜色 –

回答

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