删除R中折线图中某个值的点

时间:2013-07-28 19:25:32

标签: r plot line

我目前正在使用R来创建折线图。我正在使用的数据框看起来类似于:

       1989  1990  1991  1992  1993
    A  -30   -16     0     0     0
    B   12    32     7     0     0
    C    0     0     0     0     0
    D    0     3    -8    -6     6
    E    0     0     0     0    -7

每个字母都是一个单独的行,年份在x轴上,然后值是y轴。如果值不等于零,我想只有一条线存在。我用零来绘制点是没有问题的,但是我试图将0改为NA,但这并没有像我预期的那样工作。

我如何绘制图中不存在0的数据?

4 个答案:

答案 0 :(得分:3)

这是使用ggplot2的一种方式。但首先,您必须重塑您的数据。我会使用reshape2包执行此操作,如下所示:

require(reshape2)
# melt the data.frame.. and I've manually added the row names as separate col
dd <- transform(melt(df), grp = LETTERS[1:5])
# change type and replace 0 with NA
dd$variable <- as.numeric(as.character(dd$variable))
dd$value[dd$value == 0] <- NA

require(ggplot2)
ggplot(data = dd, aes(x=variable, y=value, group=grp, colour=grp)) + 
       geom_line() + geom_point()

enter image description here

答案 1 :(得分:1)

这感觉有点hackish但适用于您的样本数据:

plot(NA, xlim=c(.5,5.5), ylim=c(min(df)-1,max(df)+1),
         xaxt="n", xlab="Year", ylab="Value")
axis(1,1:5,labels=gsub("X","",names(df)))
apply(df,1,function(x) if(sum(!x==0)>0) points((1:ncol(df))[!x==0],x[!x==0],type="b") )

enter image description here

答案 2 :(得分:1)

另一种变体,使用matplot,假设在本文末尾使用df。我将其中一年从1997更改为1993只是为了表明x轴值被解释为数字而不是等间距因子。

df[df==0] <- NA
matplot(as.numeric(names(df)),t(as.matrix(df)), type="o",pch=19,lty=1,ann=FALSE)
title(xlab="Years",ylab="Values")

,并提供:

enter image description here

使用的数据:

df <- read.table(textConnection("
       1989  1990  1991  1992  1997
    A  -30   -16     0     0     0
    B   12    32     7     0     0
    C    0     0     0     0     0
    D    0     3    -8    -6     6
    E    0     0     0     0    -7
"),header=T,check.names=FALSE)

答案 3 :(得分:0)

除了@ Arun的回答,我建议如果你想要删除所有条目为0的行,你可以使用类似

的内容
df[sapply(1:nrow(df), function(i) !all(df[i,] == 0)),]

其中df是您的data.frame。这将消除所有元素为0的所有行,您可以根据需要绘制其余的行。