2014-11-25 38 views
0

有沒有辦法改變R中缺失數據點的形狀?我正在繪製一個棒棒糖樣式的.csv文件。如何使用ggplot2說明不同形狀的非可用數據點?

Name,chr,Pos,Reads...ME_016,Reads...ME_017,Reads...ME_018,Reads...ME_019 
cg01389728,chr10,6620395,33.82,41.38,41.38,38.46 
cg01389728,chr10,6620410,0,-,-,- 
cg01389728,chr10,6620430,0,0,-,- 
cg01389728,chr10,6620447,0,-,0,- 
cg01389728,chr10,6620478,0,-,-,- 
cg01389728,chr10,6620510,28.33,29.85,25.64,28.13 
cg01389728,chr10,6620520,0,0,-,0 
cg01389728,chr10,6620531,0,-,50,- 

使用GGPLOT2,我的圖表與此創建:

dataset <-read.table("testset", sep=",",na.strings="-", header=TRUE) 
dataset <- subset(dataset, select=c(-Name, -chr)) 
dataset <- melt(dataset, id.vars="Pos") 
dataset$variable <- gsub("\\.\\.\\.","_",dataset$variable) 
xaxes <- unique(dataset$Pos) 
dataset$Pos <- as.factor(dataset$Pos) 
ggplot(dataset, aes(x=Pos, y=variable,fill=cut(value, breaks=10))) + geom_point(size=4, shape=21) + geom_line() + scale_fill_discrete(labels=c("0-10%","10-20%","20-30%","30-40%","40-50%","50-60%","60-70%","70-80%","80-90%","90-100%")) + 
    xlab("CpG Positions") + 
    ylab("Sample") + 
    labs(fill="Coverage in %") + 
    theme_bw() + 
    theme(axis.text.x = element_text(angle=90, hjust=1, vjust=0.5),plot.title = element_text(vjust=2),axis.title.x = element_text(vjust=-0.5),axis.title.y = element_text(vjust=1.5)) 

不過,我想缺少點的形狀(「 - 」)設置的情節一個「x」, (shape = 4)並在圖例中顯示它們。 我已經試過方法,如:

scale_fill_manual(values=c(value, NA)) 

或:

scale_shape_manual(values=c(21,4)) 

默認情況下, 「 - 」 也顯示與形狀21和灰色。必須有辦法來操縱這個?編寫這樣的方法可能是個訣竅,但是如何將其稱爲整列?

formas <- function(x){ 
+  if(is.na(x)) forma <- 4 
+  if(!is.na(x)) forma <- 21 
+  return(forma) 
+ } 

回答

2

我覺得這很接近。

ggplot(dataset, aes(x=Pos, y=variable, 
        color=cut(value, breaks=10), 
        shape=ifelse(is.na(value),"Missing","Present"))) + 
    geom_point(size=4) + 
    geom_line() + 
    scale_shape_manual(name="",values=c(Missing=4,Present=19))+ 
    scale_color_discrete(labels=c("0-10%","10-20%","20-30%","30-40%","40-50%","50-60%","60-70%","70-80%","80-90%","90-100%")) + 
    xlab("CpG Positions") + 
    ylab("Sample") + 
    labs(color="Coverage in %") + 
    theme_bw() + 
    theme(axis.text.x = element_text(angle=90, hjust=1, vjust=0.5),plot.title = element_text(vjust=2),axis.title.x = element_text(vjust=-0.5),axis.title.y = element_text(vjust=1.5)) 

變化是:

  • 使用的顏色,而不是填充,用shape=19的點數據
  • 添加shape審美ggplot(...)通話。
  • 刪除shape=21geom_point(...)呼叫。
  • 增加了scale_shape_manual(...)來定義MissingPresent的形狀,並關閉引導標籤。

我知道你想用黑色輪廓填充點(它看起來更好),但是當我嘗試添加形狀審美時,填充圖例無法正確顯示顏色。親自嘗試一下。

+0

適合我。偉大的想法就是用顏色「覆蓋」形狀! – user3401516 2014-11-26 14:21:08

0

這是另一種更接近於生成您指定的圖形的方法(黑色輪廓和填充顏色由覆蓋範圍確定的圓形點)。

fill.colors <- hcl(h=seq(15, 375, length=11), l=65, c=100)[1:10] 
ggplot(dataset, aes(x=Pos, y=variable, 
        fill=cut(value, breaks=10), 
        shape=ifelse(is.na(value),"Missing","Present"))) + 
    geom_point(size=4) + 
    geom_line() + 
    scale_fill_manual(name="Coverage in %", 
        values=fill.colors, 
        labels=c("0-10%","10-20%","20-30%","30-40%","40-50%","50-60%","60-70%","70-80%","80-90%","90-100%"), 
        drop=FALSE) + 
    scale_shape_manual(name="",values=c(Missing=4,Present=21),limits=c("Missing"))+ 
    xlab("CpG Positions") + 
    ylab("Sample") + 
    labs(color="Coverage in %") + 
    theme_bw() + 
    theme(axis.text.x = element_text(angle=90, hjust=1, vjust=0.5), 
     plot.title = element_text(vjust=2), 
     axis.title.x = element_text(vjust=-0.5), 
     axis.title.y = element_text(vjust=1.5))+ 
    guides(fill=guide_legend(override.aes=list(colour=fill.colors),order=1)) 

與使用點狀21和填充審美對方回答的問題是,雖然在情節正確顯示填充顏色,則不能正確顯示在圖例中。周圍的一種方法是強制ggplot設置Legend採用

guides(fill=guide_legend(override.aes=list(colour=fill.colors),order=1)) 

不幸的是,這樣做填充顏色,你必須手動指定填充顏色(因此實際的填充和覆蓋填充相同)。此代碼使用

fill.colors <- hcl(h=seq(15, 375, length=11), l=65, c=100)[1:10] 

它創建一個模擬ggplot默認值的調色板。你當然可以在這裏使用你自己的調色板。

雖然這確實更接近您的原始意圖,但我確實認爲其他答案提供了更好的數據可視化。圍繞這些點的黑色輪廓線雖然「有吸引力」,但區分填充顏色更困難,特別是使用了10種可能的顏色(無論如何它都處於可辨別性的邊緣)。

+0

恐怕顏色仍然混淆不清,顯示不正確。謝謝你的提示 - 迄今爲止我還沒有注意到這一點。 – user3401516 2014-12-04 10:03:10

+0

原因是cut(values,breaks = 10)不能從0-100縮放,而是從min-max縮放。這就是爲什麼班級從0-5,25-30,30-35 ... 變成切(值,休息= c(-0.01,10,20,30,40,50,60,70,80, 90,100)可以解決這個問題,但現在不再顯示NA了。 – user3401516 2014-12-04 13:22:17

0

我看不到,這是爲什麼不工作:

fill.colors <- hcl(h=seq(15, 375, length=11), l=65, c=100)[1:10] 
ggplot(dataset, aes(x=Pos, y=variable 
        ,color=cut(value, breaks=c(-0.01,10,20,30,40,50,60,70,80,90,100)) 
        ,shape=ifelse(is.na(value),"Missing","Present"))) + 
    geom_point(size=4) + 
    scale_shape_manual(name="",values=c("Missing"=4,"Present"=19),limits=c("Missing"))+ 
    scale_color_manual(name="Coverage in %", 
        values=ifelse(is.na(dataset$value),"grey",fill.colors), 
        labels=c("0-10%","10-20%","20-30%","30-40%","40-50%","50-60%","60-70%","70-80%","80-90%","90-100%"),drop=FALSE) + 
    theme_bw() + 
    theme(axis.text.x = element_text(angle=90, hjust=1, vjust=0.5), 
     plot.title = element_text(vjust=2), 
     axis.title.x = element_text(vjust=-0.5), 
     axis.title.y = element_text(vjust=1.5)) + 
    xlab("CpG Positions") + 
    ylab("Sample") + 
    labs(color="Coverage in %") + 
    guides(fill=guide_legend(override.aes=list(colour=fill.colors),order=1)) 

NA值不與X顯示了,而是在「灰色」,全班90%-100%顯示它們會顯示爲灰色。沒有顯示錯誤信息 - 問題是什麼?

相關問題