ggplot图层与另一图层相互干扰

时间:2017-03-06 15:49:08

标签: r plot ggplot2

我正在策划一个大的情节,并且出于某种原因,一些数据会消失。

我玩了一下,发现如果删除其他图层,数据会再次出现。这是怎么回事?

情节,遗漏了一些数据

The plot, missing some of the data

删除其他图层(绿线和黑线)后的数据图

The plot with the data

这是相关的代码 - (如果我知道如何,我会提供一个可重复的例子,我不确定是什么原因造成的,以及如何重现它)

main_plot <- ggplot(seg) + facet_grid(id~chr, scales='free_x')

# KNN
# remove KNN rows that don't contain anything (after faceting)
seg <- seg[!(grepl('KNN', seg$id, fixed = TRUE) & seg$log2 == 0),]
 # check that there are KNN line before ploting
if(sum(grepl("KNN", seg$id,fixed=TRUE))) {
  main_plot <- main_plot + 
    geom_segment(data=seg[grepl("KNN",seg$id,fixed=TRUE),],
                 mapping=aes(x=start,xend=end,y=0,yend=0,size=3,color=((log2>0) - 0.5)*6))
}
# scatter
###main_plot <- main_plot + geom_segment(data=seg[grepl("hits",seg$id, fixed = TRUE),],
###                                    mapping=aes(x=start,xend=end,y=log2,yend=log2, size = 2),color='chartreuse3')
# median with smothing
###    if(sum(median_data_with_smoothing$median_color == 'red') > 0) {
###main_plot <- main_plot + geom_segment(data=median_data_with_smoothing[median_data_with_smoothing$median_color == 'red',], 
###                                     mapping=aes(x=start, xend=end, y=median, yend=median,size=2), color='red')
###}
###if(sum(median_data_with_smoothing$median_color == 'cyan') > 0) {
###main_plot <- main_plot + geom_segment(data=median_data_with_smoothing[median_data_with_smoothing$median_color == 'cyan',], 
###                                     mapping=aes(x=start, xend=end, y=median, yend=median,size=2), color='cyan')
###}
###if(sum(median_data_with_smoothing$median_color == 'black') > 0) {
###main_plot <- main_plot + geom_segment(data=median_data_with_smoothing[median_data_with_smoothing$median_color == 'black',], 
###                                        mapping=aes(x=start, xend=end, y=median, yend=median,size=2), color='black')
###}
# adding more layers
main_plot <- main_plot + 
  scale_color_gradient2(limits=c(-3,3),low="cyan",mid="gray60",high="red",na.value="deeppink",midpoint=0) +
  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)) +
  theme(panel.spacing=unit(2, "points")) +
  ylab("") + 
  ylim(c(-2,2))

代码中包含###的部分是我删除的图层,数据出现了。

数据来自2个非常大的data.table s(300K行),所以我无法以某种方式上传它。

1 个答案:

答案 0 :(得分:1)

问题是我在相同的Y坐标(0)中绘制所有段,并且ggplot将段视为离散值或类似的东西。

我使用jitter()为数据添加了一些噪音,然后我可以看到图中的所有数据。

这是我的代码 -

if(sum(grepl("KNN", seg$id,fixed=TRUE))) {
  main_plot <- main_plot + 
    geom_segment(data=seg[grepl("KNN",seg$id,fixed=TRUE),],
                 mapping=aes(x=start,xend=end,y=jitter(log2/100, amount=0.00001),yend=jitter(log2/100,amount=0.00001),size=3,color=((log2>0) - 0.5)*6))
}

log2的值是1和-1,所以我将其除以100得到足够接近0的值,并以更小的比例添加噪声,因此它不可见。

当我删除一些数据(散点图​​和中位数)时,我看到所有KNN数据的原因是因为比例发生了变化(比例取决于您绘制的数据)