ggplot2中的geom_line无法连接所有点。为什么?怎么解决?

时间:2017-08-04 17:59:27

标签: r data-visualization ggplot2

我想在ggplot2中制作一个图形,将模型预测显示为一条线,将观察结果显示为点。该线应位于点的顶部。

不幸的是,我的代码没有绘制线(正确)。我该如何解决这个问题?我应该使用另一个geom吗?

PS:模型预测不一定是直线。

数据

df = structure(list(time = c(100.067043929044, 100.067043929044, 100.067043929044, 
                             100.067043929044, 101, 101.008924630473, 101.008924630473, 101.008924630473, 
                             101.008924630473, 101.008924630473, 102, 103, 104, 105, 106, 
                             107, 107.089057332598, 107.089057332598, 108, 108.20659267463, 
                             108.20659267463, 108.20659267463, 108.20659267463, 108.20659267463, 
                             108.20659267463, 108.20659267463, 108.703995034014, 108.703995034014, 
                             108.703995034014, 108.703995034014, 108.703995034014, 109, 110, 
                             110.114571494081, 110.114571494081, 110.114571494081, 110.114571494081, 
                             110.114571494081, 110.343557977437, 110.343557977437, 110.343557977437, 
                             110.343557977437, 110.343557977437, 111, 111.393980945717, 111.393980945717, 
                             111.393980945717, 111.393980945717, 111.393980945717, 112, 112.00243681339, 
                             112.00243681339, 112.00243681339, 112.00243681339, 113, 113.611902259838, 
                             113.611902259838, 113.611902259838, 113.611902259838, 113.611902259838, 
                             114, 114.979627464336, 114.979627464336, 114.979627464336, 114.979627464336, 
                             115, 115.265297815627, 115.265297815627, 115.265297815627, 115.265297815627, 
                             115.265297815627, 115.265297815627, 115.265297815627, 115.265297815627, 
                             115.977376227469, 115.977376227469, 115.977376227469, 115.977376227469, 
                             116, 116.424031058827, 116.424031058827, 116.424031058827, 116.424031058827, 
                             116.424031058827, 116.698946471018, 116.698946471018, 117, 117.01495704613, 
                             117.01495704613, 117.01495704613, 117.01495704613, 117.01495704613, 
                             117.454710262887, 117.454710262887, 117.454710262887, 117.454710262887, 
                             117.454710262887, 117.992443207322, 117.992443207322, 117.992443207322, 
                             117.992443207322, 117.992443207322, 118, 118.676546409334, 118.795766163362, 
                             118.795766163362, 118.795766163362, 118.795766163362, 118.795766163362, 
                             119), observation = c(4.21666666666667, 3.11666666666667, 4.23, 
                                                   4.48666666666667, NA, 5.48333333333333, 5.67, 5.72666666666667, 
                                                   4.06333333333333, 3.74666666666667, NA, NA, NA, NA, NA, NA, 6.26, 
                                                   14.19, NA, 9.47, 9.95333333333333, 10.115, 13.39, 9.10666666666667, 
                                                   6.71666666666667, 3.16, 6.5, 3.91, 3.81, 3.56, 2.84, NA, NA, 
                                                   6.89666666666667, 12.9533333333333, 8.44333333333333, 11.5333333333333, 
                                                   6.44666666666667, 6.29, 9.44, 7.07, 7.85666666666667, 5.65, NA, 
                                                   7.34333333333333, 8.11333333333333, 10.7533333333333, 9.19666666666667, 
                                                   8.57, NA, 16.72, 18.6533333333333, 13.7033333333333, 11.2266666666667, 
                                                   NA, 20.0933333333333, 18.415, 16.9033333333333, 14.54, 17.7633333333333, 
                                                   NA, 7.3125, 6.228, 7.76, 7.53666666666667, NA, 6.685, 6.85, 4.22, 
                                                   5.085, 6.895, 6.99666666666667, 6.49333333333333, 9.445, 8.46333333333333, 
                                                   5.53, 7.02, 5.54, NA, 3.80666666666667, 5.35, 3.215, 5.1, 2.68666666666667, 
                                                   13.13, 9.645, NA, 6.975, 11.9433333333333, 10.9033333333333, 
                                                   8.77666666666667, 9.09, 4.405, 5.7, 2.58, 3.17666666666667, 3.03, 
                                                   6.48, 9.96333333333333, 13.1833333333333, 10.0133333333333, 7.44, 
                                                   NA, 9.73, 16.92, 13.77, 8.75, 10.6666666666667, 1.3, NA), prediction = c(NA, 
                                                                                                                            NA, NA, NA, 5.16304701809333, NA, NA, NA, NA, NA, 5.24694452943803, 
                                                                                                                            5.33395080545174, 5.4238858914801, 5.51655500429435, 5.6117471762703, 
                                                                                                                            5.7092339677075, NA, NA, 5.80876254342396, NA, NA, NA, NA, NA, 
                                                                                                                            NA, NA, NA, NA, NA, NA, NA, 5.91002555280603, 6.0126381413324, 
                                                                                                                            NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 6.11614048603116, NA, 
                                                                                                                            NA, NA, NA, NA, 6.21998493479094, NA, NA, NA, NA, 6.32353446515982, 
                                                                                                                            NA, NA, NA, NA, NA, 6.42607073245445, NA, NA, NA, NA, 6.52681470723314, 
                                                                                                                            NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 6.62492403712397, 
                                                                                                                            NA, NA, NA, NA, NA, NA, NA, 6.71948343363089, NA, NA, NA, NA, 
                                                                                                                            NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 6.80950439913944, 
                                                                                                                            NA, NA, NA, NA, NA, NA, 6.8939376352439)), .Names = c("time", 
                                                                                                                                                                                  "observation", "prediction"), class = "data.frame", row.names = c(696L, 
                                                                                                                                                                                                                                                    700L, 704L, 708L, 711L, 715L, 719L, 723L, 727L, 731L, 734L, 737L, 
                                                                                                                                                                                                                                                    740L, 743L, 746L, 749L, 753L, 757L, 760L, 764L, 768L, 772L, 776L, 
                                                                                                                                                                                                                                                    780L, 784L, 788L, 792L, 796L, 800L, 804L, 808L, 811L, 814L, 818L, 
                                                                                                                                                                                                                                                    822L, 826L, 830L, 834L, 838L, 842L, 846L, 850L, 854L, 857L, 861L, 
                                                                                                                                                                                                                                                    865L, 869L, 873L, 877L, 880L, 884L, 888L, 892L, 896L, 899L, 903L, 
                                                                                                                                                                                                                                                    907L, 911L, 915L, 919L, 922L, 926L, 930L, 934L, 938L, 941L, 945L, 
                                                                                                                                                                                                                                                    949L, 953L, 957L, 961L, 965L, 969L, 973L, 977L, 981L, 985L, 989L, 
                                                                                                                                                                                                                                                    992L, 996L, 1000L, 1004L, 1008L, 1012L, 1016L, 1020L, 1023L, 
                                                                                                                                                                                                                                                    1027L, 1031L, 1035L, 1039L, 1043L, 1047L, 1051L, 1055L, 1059L, 
                                                                                                                                                                                                                                                    1063L, 1067L, 1071L, 1075L, 1079L, 1083L, 1086L, 1090L, 1094L, 
                                                                                                                                                                                                                                                    1098L, 1102L, 1106L, 1110L, 1113L))
str(df)
ggplot(df) + 
    geom_point(aes(x=time, y=observation), color="grey")+
    geom_line(aes(x=time, y=prediction), color="black")+
    geom_point(aes(x=time, y=prediction), color="blue")

代码

ggplot(df) + 
    geom_point(aes(x=time, y=observation), color="grey")+
    geom_line(aes(x=time, y=prediction), color="black")+
    geom_point(aes(x=time, y=prediction), color="blue")

剧情 enter image description here

1 个答案:

答案 0 :(得分:4)

您需要删除缺少的预测值。当缺少值时,该行停止。所以:

ggplot(df) + 
  geom_point(aes(x=time, y=observation), color="grey")+
  geom_line(data=df[!is.na(df$prediction),],aes(x=time, y=prediction), color="black")+
  geom_point(aes(x=time, y=prediction), color="blue")

enter image description here