我正在使用'闪亮'来创建一个绘制一些数据的应用程序,主要情节有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时才会执行它?或者可能以不同的方式做到这一点?
提前致谢!
答案 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