2012-05-10 56 views
3

(此如下ggplot2 loess Q爲此,我有一個很好的答案) - 導致該地塊:(對不起!)區隔加散點圖

answer image to first question

我的[R知識是非常有限的

我使用表data1中的數據繪製散點圖。

data1<-NaRV.omit(data[,c(2,3,7,10)]) #(2=start, 3=end, 7=value, 10=type) 
ylabs='E/A - ratio' 
p1<-ggplot(data1, aes(x=start, y=value)) + 
ylim(0,5) + 
geom_point(shape=points, col=pointcol1, na.rm=T) + 
geom_hline(aes(yintercept=1, col=linecol)) + 
geom_smooth(method="loess", span=spanv, fullrange=F, se=T, na.rm=T) + 
# 
xlab(xlabs) + 
ylab(ylabs) 

一些區域具有無數據(包括在中間的一個大區域,而且也較小離散區域),其中,我想在y以繪製彩色段= 0來說明這一事實

我結合兩種數據類型放入一個帶有標籤列#10 ='type'(scatter data ='cnv'的內容和no-data ='nregion')的表格中。值列中的nregions有0個。

如何獲取分散的'cnv'數據和只有'nregion'的數據來繪製分段;兩個在同一個情節?

我發現geom_segment:

+ geom_segment(aes(x=data1$start, y=0, xend=data1$end, yend=0)) 

,但我沒有找到一個方法來子集每個ggplot次要情節。

感謝

####跟進@gauden解決方案

嗨@gauden 我想你的方法,它部分的工作。 我的問題是,我不能像我使用的那樣很好地分割我的數據] -1; 0]因爲我nregions分散(由在圖片中的藍色點和線表示)和對於每個新的圖不同,因爲在此圖像中:

target image with multiple segments

因此,黃土穿過大NREGION像之前一樣。我怎樣才能防止區域內的黃土?

############################# 
## plot settings (edit below) 
spanv<-0.1 
pointcol1="#E69F00" 
pointcol2="#56B4E9" 
pointcol3="#009E73" 
points=20 
onecol="green" 
colnreg="blue" 
xlabs=paste(onechr, " position", " (loess-span=", spanv, ")", sep="") 

##### end edit ############## 

######################################################## 
## using the center coordinate of each segment and points 

## prepare plot #1 
# plot E/A - ratio 
## draw loess average for cnv 
## draw line for nregion 
ylabs='E/A - ratio' 
p1<-ggplot(chrdata, aes(x=start+1000, y=E.R, group=type, label=type)) + 
ylim(0,5) + 
geom_hline(aes(yintercept=1, col=onecol)) + 
geom_point(data = chrdata[chrdata$type != 'nregion',], shape=points, col=pointcol2) + 
geom_smooth(data = chrdata[chrdata$type != 'nregion',], method="loess", span=spanv) + 
geom_point(data = chrdata[chrdata$type == 'nregion',], col=colnreg) + 
geom_segment(data = chrdata[chrdata$type == 'nregion',], aes(x=start, y=E.R, xend=end, yend=E.R), colour=colnreg, linetype=1, size=1) + 
xlab(xlabs) + 
ylab(ylabs) 

回答

7

編輯:全面修訂,允許明確要求

這裏是我的目標陰謀: multiple-segment scatter plot

這裏是產生它的代碼:

library("ggplot2") 

# CREATE DATA FRAME 
# This is the sort of data that I understand you to have 
start <- rnorm(200) 
value <- rnorm(200) 
df <- data.frame(cbind(start, value)) 
df[ df$start > -0.6 & df$start <= 0, "value"] <- 0 
df[ df$start > -1.6 & df$start <= -1.3, "value"] <- 0 
df[ df$start > 0.9 & df$start <= 1.2, "value"] <- 0 

df$type <- rep('cnv', 200) 
df[ df$value == 0, "type"] <- 'nregion' 
df[ df$value != 0, "type"] <- 'cnv' 

# SORT the data frame by value so that the 'cnv' and 
# 'nregion' chunks become contiguous 
df <- df[order(start),] 

# See note below. 
r <- rle(df$type) 
df$label <- rep(seq(from=0, length=length(r$lengths)), times=r$lengths) 

# set up plot with colour aesthetic to distinguish the three regions 
# playing around with colour and group produces different effects 
p <- ggplot(df, aes(x = start, 
        y= value, 
        colour=type, 
        group = label) 
      ) 
p <- p + theme_bw() 
# draw points outside the 'nregion' 
p <- p + geom_point(data = df[df$type != 'nregion',]) 

# draw smoothed lines outside the 'nregion' 
p <- p + geom_smooth(data = df[df$type != 'nregion',]) 


# plot zero points inside the 'nregion' 
p <- p + geom_smooth(data = df[df$type == 'nregion',], size = 2) 
p 

在對的回答中進一步解釋了rle的使用

+0

這是eaxctly我正在尋找,謝謝sooo多@gauden。我現在只需要瞭解R語法並將其轉換爲我自己的數據。大力支持! – splaisan

+0

親愛的@gauden,我添加了一些關於我的頂級帖子的更多信息,並鏈接到一張新圖片。 (PS:我如何在Stackoverflow上打勾?我沒有足夠的積分投票<15?) – splaisan

+0

你是一個嚮導!我也很欣賞其他幾個人在回答你的補充問題(我怎樣才能最好地獎勵你們所有人?)的協作努力。這現在完全符合我的需求。我意識到我還有很長的路要走在R只有一個基本的知識,這不易在這裏翻譯。矢量結構對我的生物學家來說是違反直覺的,我總是不得不努力去獲得它。無論如何,我祝你有個美好的一天,並且非常感謝你的幫助和教導。 – splaisan