【问题标题】:Plotting vectors with missing values in time series在时间序列中绘制具有缺失值的向量
【发布时间】:2014-07-19 00:57:29
【问题描述】:

我试图将此表绘制成平行线,其中 y 轴范围是 -50 到 150,x 轴是向量“天”。每个向量(X1 到 X8)都有很多缺失值,所以我只想绘制现有值并将它们(对于每个向量)用线连接起来。

这是我用来绘制数据的命令

 plot(dataframe,plot.type="single",ylim=c(-50,150))

这是我要绘制的数据框

     Days  X1  X2 X3 X4 X5 X6 X7 X8
1     600 -15 -18 NA 14 NA NA NA NA
2     620  NA  NA NA NA NA NA NA 21
3     660   0  NA NA NA NA NA NA NA
4     700  NA   8 NA NA NA NA NA 33
5     760  NA  NA NA  8 NA NA NA NA
6     780   0  NA NA NA NA NA NA NA
7     800  NA  11 NA NA 65 NA NA NA
8     820  NA  NA NA NA NA NA NA 29
9     840  NA  NA NA NA 85 NA NA NA
10    880  NA  NA NA  5 75 NA NA NA
11    900  NA  NA NA NA NA NA 10 NA
12    920  NA  NA 12 NA NA NA NA 57
13    940  NA  22 NA NA NA NA NA NA
14    960  NA  NA 12 NA NA NA NA NA
15   1000  NA  NA 14 NA NA NA NA NA
16   1060  NA  NA 14 NA NA NA NA NA
17   1120  NA  NA 11 NA NA NA NA NA

但我得到的只是一个几乎空白的窗口。

这将是我想要得到什么样的情节的一个很好的例子: http://ajpheart.physiology.org/content/ajpheart/284/5/H1585/F4.large.jpg

有什么想法吗?

【问题讨论】:

    标签: r vector time-series


    【解决方案1】:

    试试这个:

    matplot(dat[1],dat[-1],type="n")
    Map(function(x,y) lines(x[!is.na(y)],y[!is.na(y)]),dat[1],dat[-1])
    

    结果:

    matplot本质上是设置绘图区域的边界,然后Map调用依次绘制每一行,删除NA的值。

    这样您就可以重现结果,这是dat 数据集:

    dat <- data.frame(Days = c(600L, 620L, 660L, 700L, 760L, 780L, 800L, 820L, 840L, 880L, 900L, 920L, 940L, 960L, 1000L, 1060L, 1120L
    ), X1 = c(-15L, NA, 0L, NA, NA, 0L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), X2 = c(-18L, NA, NA, 8L, NA, NA, 11L, NA, NA, 
    NA, NA, NA, 22L, NA, NA, NA, NA), X3 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 12L, NA, 12L, 14L, 14L, 11L), X4 = c(14L, 
    NA, NA, NA, 8L, NA, NA, NA, NA, 5L, NA, NA, NA, NA, NA, NA, NA), X5 = c(NA, NA, NA, NA, NA, NA, 65L, NA, 85L, 75L, NA, NA, 
    NA, NA, NA, NA, NA), X6 = c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), X7 = c(NA, NA, NA, NA, NA, NA, 
    NA, NA, NA, NA, 10L, NA, NA, NA, NA, NA, NA), X8 = c(NA, 21L, NA, 33L, NA, NA, NA, 29L, NA, NA, NA, 57L, NA, NA, NA, NA, NA))
    

    【讨论】:

    • 谢谢,我明白了这个概念,但我不太确定 dat[1] 和 dat[-1] 应该是什么。我就是这样做的,但我仍然得到一个空白屏幕: matplot(Days,X1,type="n") Map(function(x,y) lines(x[!is.na(y)],y[! is.na(y)]),Days,X1) 再次感谢。
    • @Oposum - dat[1] 是数据集的第一列,可以替换为 dat["Days"] - dat[-1] 是数据集的每一列,除了第一个“天”列(负第一列 = -1 作为索引)。
    • “dat”是一个函数吗?当我在 R 中尝试该行时,我收到消息:as.matrix(x) 中的错误:找不到对象'dat'
    • @Oposum - dat 只是我在代码中使用的名称 dataframe。这是一个 data.frame 对象,包含您的数据。尝试dataframe[1]dataframe[-1] 使用您自己的代码查看结果。
    • @Oposum - 我已添加代码以将 dat 导入答案,因此您至少可以有一个完整的位示例进行测试。
    猜你喜欢
    • 2018-11-11
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多