2014-11-25 40 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%显示它们会显示为灰色。没有显示错误信息 - 问题是什么?

相关问题