Home > front end >  R studio ggplot linebreak does not appear when data is NA
R studio ggplot linebreak does not appear when data is NA

Time:07-07

I have a dataset in which I want to plot the measurements of a substance at different locations over time over time. this works with a simple line plot. However, I have some moments in my data when no measurements were executed these moments I want the lines to break. I have added some dates with NA values. However it does not present break.

The code goes like this:

chloride <- subset(df, Parameter == "chloride - nf - mg/l")
ggplot(data = chloride2, aes(x = Datum, y = as.numeric(as.factor(Waarden))))  
  geom_line(aes(color = Locatie), lwd = 1)  
  labs(x = "Datum", y = "Chloride (mg/l)")  
  scale_color_manual(values = c("navy", "darkslategray4", "orange", "yellowgreen", "cornflowerblue", "firebrick"))  
  theme_bw()  
  theme(text = element_text(size = 16), legend.position = "top")  
  scale_y_continuous(limits = c(0, 220))  
  geom_hline(yintercept = 200, linetype = "dashed")  
  scale_x_date(date_breaks = ("1 year"), labels = date_format("%m/%Y"))

I have tried it with another substance here only one location was included tried this code

extinction <- subset(df, Parameter == "Extinctie")
every.year <- data.frame(Datum = seq(min(extinction$Datum), max(extinction$Datum), by = "1 year"))
extinction2 <- merge(extinction, every.year, all = TRUE)

ggplot(data = extinction2, aes(x = Datum, y = Waarden))  
  geom_line(color = "steelblue", lwd = 1)  
  labs(y = "Extinctie-waarden", x = "Datum")  
  theme_bw()  
  theme(text = element_text(size = 16))  
  scale_y_continuous(limit = c(0, 15))  
  scale_x_date(date_breaks = ("3 month"), labels = date_format("%m/%Y"))

This worked.

it seems like it does not present a break because of the different locations

    Datum            Parameter Waarden                                      Locatie
1   2016-02-08 chloride - nf - mg/l    89.0                    Waterskivijver Wollebrand
2   2016-04-26 chloride - nf - mg/l    93.0                    Waterskivijver Wollebrand
3   2016-05-24 chloride - nf - mg/l    81.0                    Waterskivijver Wollebrand
4   2016-06-16 chloride - nf - mg/l    74.0                    Waterskivijver Wollebrand
5   2016-06-16 chloride - nf - mg/l    62.0                   Wollebrand_Inlaat zwemplas
6   2016-06-16 chloride - nf - mg/l    70.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
7   2016-06-16 chloride - nf - mg/l    63.0                veilingroute_bovenstroom stuw
8   2016-06-16 chloride - nf - mg/l    59.0                          Strijp_inlaat FLORA
9   2016-06-21 chloride - nf - mg/l    51.0                    Waterskivijver Wollebrand
10  2016-06-28 chloride - nf - mg/l    45.0                    Waterskivijver Wollebrand
11  2016-06-28 chloride - nf - mg/l    33.0                   Wollebrand_Inlaat zwemplas
12  2016-06-28 chloride - nf - mg/l    36.0                          Strijp_inlaat FLORA
13  2016-06-28 chloride - nf - mg/l    47.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
14  2016-06-28 chloride - nf - mg/l    82.0                veilingroute_bovenstroom stuw
15  2016-07-08 chloride - nf - mg/l    46.0                   Wollebrand_Inlaat zwemplas
16  2016-07-08 chloride - nf - mg/l    54.0                    Waterskivijver Wollebrand
17  2016-07-08 chloride - nf - mg/l    46.0                veilingroute_bovenstroom stuw
18  2016-07-08 chloride - nf - mg/l    42.0                          Strijp_inlaat FLORA
19  2016-07-11 chloride - nf - mg/l    63.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
20  2016-07-19 chloride - nf - mg/l    68.0                    Waterskivijver Wollebrand
21  2016-07-19 chloride - nf - mg/l    65.0                   Wollebrand_Inlaat zwemplas
22  2016-07-19 chloride - nf - mg/l    72.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
23  2016-07-19 chloride - nf - mg/l    53.0                veilingroute_bovenstroom stuw
24  2016-07-19 chloride - nf - mg/l    45.0                          Strijp_inlaat FLORA
25  2016-08-01 chloride - nf - mg/l    54.0                   Wollebrand_Inlaat zwemplas
26  2016-08-01 chloride - nf - mg/l    65.0                    Waterskivijver Wollebrand
27  2016-08-01 chloride - nf - mg/l    62.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
28  2016-08-01 chloride - nf - mg/l    45.0                veilingroute_bovenstroom stuw
29  2016-08-01 chloride - nf - mg/l    48.0                          Strijp_inlaat FLORA
30  2016-08-16 chloride - nf - mg/l    61.0                    Waterskivijver Wollebrand
31  2016-08-16 chloride - nf - mg/l    61.0                    Waterskivijver Wollebrand
32  2016-08-16 chloride - nf - mg/l    58.0                   Wollebrand_Inlaat zwemplas
33  2016-08-16 chloride - nf - mg/l    62.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
34  2016-08-16 chloride - nf - mg/l    57.0                veilingroute_bovenstroom stuw
35  2016-08-16 chloride - nf - mg/l    56.0                          Strijp_inlaat FLORA
36  2016-08-30 chloride - nf - mg/l    48.0                    Waterskivijver Wollebrand
37  2016-09-02 chloride - nf - mg/l    58.0                          Strijp_inlaat FLORA
38  2016-09-02 chloride - nf - mg/l    51.0                    Waterskivijver Wollebrand
39  2016-09-02 chloride - nf - mg/l    54.0                   Wollebrand_Inlaat zwemplas
40  2016-09-02 chloride - nf - mg/l    56.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
41  2016-09-02 chloride - nf - mg/l    60.0                veilingroute_bovenstroom stuw
42  2016-09-13 chloride - nf - mg/l    64.0                    Waterskivijver Wollebrand
43  2016-09-15 chloride - nf - mg/l    68.0                    Waterskivijver Wollebrand
44  2016-09-15 chloride - nf - mg/l    76.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
45  2016-09-15 chloride - nf - mg/l    72.0                   Wollebrand_Inlaat zwemplas
46  2016-09-15 chloride - nf - mg/l    75.0                veilingroute_bovenstroom stuw
47  2016-09-15 chloride - nf - mg/l    72.0                          Strijp_inlaat FLORA
48  2016-09-30 chloride - nf - mg/l    75.0                    Waterskivijver Wollebrand
49  2016-09-30 chloride - nf - mg/l    74.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
50  2016-09-30 chloride - nf - mg/l    63.0                   Wollebrand_Inlaat zwemplas
51  2016-09-30 chloride - nf - mg/l    68.0                veilingroute_bovenstroom stuw
52  2016-09-30 chloride - nf - mg/l    71.0                          Strijp_inlaat FLORA
53  2016-10-10 chloride - nf - mg/l    75.0                    Waterskivijver Wollebrand
54  2016-10-10 chloride - nf - mg/l    74.0                   Wollebrand_Inlaat zwemplas
55  2016-10-10 chloride - nf - mg/l    76.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
56  2016-10-10 chloride - nf - mg/l    76.0                veilingroute_bovenstroom stuw
57  2016-10-10 chloride - nf - mg/l    74.0                          Strijp_inlaat FLORA
58  2016-10-25 chloride - nf - mg/l    70.0                    Waterskivijver Wollebrand
59  2016-10-25 chloride - nf - mg/l    66.0                   Wollebrand_Inlaat zwemplas
60  2016-10-25 chloride - nf - mg/l    64.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
61  2016-10-25 chloride - nf - mg/l    65.0                veilingroute_bovenstroom stuw
62  2016-10-25 chloride - nf - mg/l    67.0                          Strijp_inlaat FLORA
63  2016-11-07 chloride - nf - mg/l    60.0                    Waterskivijver Wollebrand
64  2016-11-14 chloride - nf - mg/l    62.0                    Waterskivijver Wollebrand
65  2016-11-14 chloride - nf - mg/l    52.0                   Wollebrand_Inlaat zwemplas
66  2016-11-14 chloride - nf - mg/l    60.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
67  2016-11-14 chloride - nf - mg/l    63.0                veilingroute_bovenstroom stuw
68  2016-11-14 chloride - nf - mg/l    52.0                          Strijp_inlaat FLORA
69  2016-12-20 chloride - nf - mg/l    76.0                    Waterskivijver Wollebrand
70  2016-12-20 chloride - nf - mg/l    84.0                   Wollebrand_Inlaat zwemplas
71  2016-12-20 chloride - nf - mg/l    83.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
72  2016-12-20 chloride - nf - mg/l    93.0                veilingroute_bovenstroom stuw
73  2016-12-20 chloride - nf - mg/l    97.0                          Strijp_inlaat FLORA
74  2017-01-13 chloride - nf - mg/l   103.0                    Waterskivijver Wollebrand
75  2017-01-13 chloride - nf - mg/l    49.2                   Wollebrand_Inlaat zwemplas
76  2017-01-13 chloride - nf - mg/l    68.2 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
77  2017-01-13 chloride - nf - mg/l    60.8                veilingroute_bovenstroom stuw
78  2017-01-13 chloride - nf - mg/l    61.7                          Strijp_inlaat FLORA
79  2017-02-08                 <NA>      NA                                         <NA>
80  2017-02-13 chloride - nf - mg/l    73.4                          Strijp_inlaat FLORA
81  2017-02-13 chloride - nf - mg/l    99.5                    Waterskivijver Wollebrand
82  2017-02-13 chloride - nf - mg/l   133.0                   Wollebrand_Inlaat zwemplas
83  2017-02-13 chloride - nf - mg/l   110.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
84  2017-02-13 chloride - nf - mg/l    99.1                veilingroute_bovenstroom stuw
85  2017-03-07 chloride - nf - mg/l    95.7                    Waterskivijver Wollebrand
86  2017-03-09 chloride - nf - mg/l    55.3                   Wollebrand_Inlaat zwemplas
87  2017-03-09 chloride - nf - mg/l    74.5 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
88  2017-03-09 chloride - nf - mg/l    71.7                veilingroute_bovenstroom stuw
89  2017-03-09 chloride - nf - mg/l    64.3                          Strijp_inlaat FLORA
90  2017-04-04 chloride - nf - mg/l    99.1                   Wollebrand_Inlaat zwemplas
91  2017-04-04 chloride - nf - mg/l   111.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
92  2017-04-04 chloride - nf - mg/l   101.0                veilingroute_bovenstroom stuw
93  2017-04-04 chloride - nf - mg/l    91.2                          Strijp_inlaat FLORA
94  2017-04-25 chloride - nf - mg/l   107.0                    Waterskivijver Wollebrand
95  2017-05-02 chloride - nf - mg/l   111.0                   Wollebrand_Inlaat zwemplas
96  2017-05-02 chloride - nf - mg/l   123.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
97  2017-05-02 chloride - nf - mg/l   143.0                veilingroute_bovenstroom stuw
98  2017-05-02 chloride - nf - mg/l   132.0                          Strijp_inlaat FLORA
99  2017-05-02 chloride - nf - mg/l   113.0       Waterskivijver Wollebrand steiger-vlot
100 2017-05-23 chloride - nf - mg/l   147.0                    Waterskivijver Wollebrand
101 2017-06-06 chloride - nf - mg/l   100.0                   Wollebrand_Inlaat zwemplas
102 2017-06-06 chloride - nf - mg/l   147.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
103 2017-06-06 chloride - nf - mg/l    99.0                veilingroute_bovenstroom stuw
104 2017-06-06 chloride - nf - mg/l    88.2                          Strijp_inlaat FLORA
105 2017-06-06 chloride - nf - mg/l   144.0       Waterskivijver Wollebrand steiger-vlot
106 2017-06-20 chloride - nf - mg/l   127.0                    Waterskivijver Wollebrand
107 2017-07-05 chloride - nf - mg/l   105.0                   Wollebrand_Inlaat zwemplas
108 2017-07-05 chloride - nf - mg/l   103.0 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
109 2017-07-05 chloride - nf - mg/l   106.0                veilingroute_bovenstroom stuw
110 2017-07-05 chloride - nf - mg/l    84.3                          Strijp_inlaat FLORA
111 2017-07-05 chloride - nf - mg/l   118.0       Waterskivijver Wollebrand steiger-vlot
112 2017-07-18 chloride - nf - mg/l    92.9                    Waterskivijver Wollebrand
113 2017-08-03 chloride - nf - mg/l    72.1                   Wollebrand_Inlaat zwemplas
114 2017-08-03 chloride - nf - mg/l    65.4 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
115 2017-08-03 chloride - nf - mg/l    63.3                veilingroute_bovenstroom stuw
116 2017-08-03 chloride - nf - mg/l    72.7                          Strijp_inlaat FLORA
117 2017-08-03 chloride - nf - mg/l    84.2       Waterskivijver Wollebrand steiger-vlot
118 2017-08-15 chloride - nf - mg/l    85.4                    Waterskivijver Wollebrand
119 2017-09-05 chloride - nf - mg/l    70.9                veilingroute_bovenstroom stuw
120 2017-09-05 chloride - nf - mg/l    68.6       Waterskivijver Wollebrand steiger-vlot
121 2017-09-05 chloride - nf - mg/l    63.1                   Wollebrand_Inlaat zwemplas
122 2017-09-05 chloride - nf - mg/l    66.8 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
123 2017-09-05 chloride - nf - mg/l    55.5                          Strijp_inlaat FLORA
124 2017-09-12 chloride - nf - mg/l    52.5                    Waterskivijver Wollebrand
125 2017-10-05 chloride - nf - mg/l    39.2                   Wollebrand_Inlaat zwemplas
126 2017-10-05 chloride - nf - mg/l    33.3                veilingroute_bovenstroom stuw
127 2017-10-05 chloride - nf - mg/l    37.5                          Strijp_inlaat FLORA
128 2017-10-05 chloride - nf - mg/l    66.5       Waterskivijver Wollebrand steiger-vlot
129 2017-10-31 chloride - nf - mg/l    81.3 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
130 2017-11-09 chloride - nf - mg/l    70.5                   Wollebrand_Inlaat zwemplas
131 2017-11-09 chloride - nf - mg/l    82.6 hoofdwatergang_Lange Broekweg nr 78 (?)_tuin
132 2017-11-09 chloride - nf - mg/l    72.0                veilingroute_bovenstroom stuw
133 2017-11-09 chloride - nf - mg/l    66.3                          Strijp_inlaat FLORA
134 2017-11-09 chloride - nf - mg/l    85.8       Waterskivijver Wollebrand steiger-vlot
135 2017-11-16 chloride - nf - mg/l    85.9       Waterskivijver Wollebrand steiger-vlot
136 2017-12-06 chloride - nf - mg/l    75.9                   Wollebrand_Inlaat zwemplas
137 2017-12-06 chloride - nf - mg/l    68.7                veilingroute_bovenstroom stuw
138 2017-12-06 chloride - nf - mg/l    58.5                          Strijp_inlaat FLORA
139 2017-12-06 chloride - nf - mg/l    86.9       Waterskivijver Wollebrand steiger-vlot
140 2018-02-08                 <NA>      NA                                         <NA>
141 2019-01-08 chloride - nf - mg/l   131.0                    Waterskivijver Wollebrand
142 2019-02-08                 <NA>      NA                                         <NA>
143 2019-02-18 chloride - nf - mg/l   141.0                    Waterskivijver Wollebrand
144 2019-02-26 chloride - nf - mg/l   142.0                    Waterskivijver Wollebrand
145 2019-04-26 chloride - nf - mg/l    86.6                   Wollebrand_Inlaat zwemplas
146 2019-04-30 chloride - nf - mg/l   115.0                    Waterskivijver Wollebrand
147 2019-05-14 chloride - nf - mg/l   121.0                    Waterskivijver Wollebrand
148 2019-05-23 chloride - nf - mg/l   115.0                   Wollebrand_Inlaat zwemplas
149 2019-05-28 chloride - nf - mg/l   117.0                    Waterskivijver Wollebrand
150 2019-05-28 chloride - nf - mg/l   113.0                    Waterskivijver Wollebrand
151 2019-06-12 chloride - nf - mg/l    96.7                    Waterskivijver Wollebrand
152 2019-06-25 chloride - nf - mg/l    91.3                    Waterskivijver Wollebrand
153 2019-06-25 chloride - nf - mg/l    88.2                   Wollebrand_Inlaat zwemplas
154 2019-07-09 chloride - nf - mg/l   101.0                    Waterskivijver Wollebrand
155 2019-07-11 chloride - nf - mg/l    89.3                   Wollebrand_Inlaat zwemplas
156 2019-07-23 chloride - nf - mg/l    92.1                    Waterskivijver Wollebrand
157 2019-08-06 chloride - nf - mg/l    85.6                    Waterskivijver Wollebrand
158 2019-08-20 chloride - nf - mg/l    75.2                    Waterskivijver Wollebrand
159 2019-08-20 chloride - nf - mg/l    76.4                    Waterskivijver Wollebrand
160 2019-08-26 chloride - nf - mg/l    91.6                   Wollebrand_Inlaat zwemplas
161 2019-09-03 chloride - nf - mg/l    89.9                    Waterskivijver Wollebrand
162 2019-09-17 chloride - nf - mg/l    84.9                    Waterskivijver Wollebrand
163 2019-09-24 chloride - nf - mg/l    92.7                    Waterskivijver Wollebrand
164 2019-09-26 chloride - nf - mg/l    68.9                   Wollebrand_Inlaat zwemplas
165 2019-10-30 chloride - nf - mg/l   109.0                   Wollebrand_Inlaat zwemplas
166 2019-11-07 chloride - nf - mg/l    94.5                    Waterskivijver Wollebrand
167 2019-11-29 chloride - nf - mg/l    82.9                   Wollebrand_Inlaat zwemplas
168 2019-12-24 chloride - nf - mg/l   100.0                   Wollebrand_Inlaat zwemplas
> 



  [1]: https://i.stack.imgur.com/mjB6G.png

CodePudding user response:

Clarifying the question

Let's first create a somewhat minimal reproducible example for others to help you.

For the data frame:

df %>%
  filter(Datum > as.Date("2017-10-01")) %>%
  dput()

Resulting in this, which can be easily copy-pasted by others to recreate your data frame:

structure(list(Datum = structure(c(17444, 17444, 17444, 17444, 
17470, 17479, 17479, 17479, 17479, 17479, 17486, 17506, 17506, 
17506, 17506, 17570, 17904, 17935, 17945, 17953, 18012, 18016, 
18030, 18039, 18044, 18044, 18059, 18072, 18072, 18086, 18088, 
18100, 18114, 18128, 18128, 18134, 18142, 18156, 18163, 18165, 
18199, 18207, 18229, 18254), class = "Date"), Parameter = c("chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", NA, "chloride - nf - mg/l", 
NA, "chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l", "chloride - nf - mg/l", 
"chloride - nf - mg/l", "chloride - nf - mg/l"), Waarden = c(39.2, 
33.3, 37.5, 66.5, 81.3, 70.5, 82.6, 72, 66.3, 85.8, 85.9, 75.9, 
68.7, 58.5, 86.9, NA, 131, NA, 141, 142, 86.6, 115, 121, 115, 
117, 113, 96.7, 91.3, 88.2, 101, 89.3, 92.1, 85.6, 75.2, 76.4, 
91.6, 89.9, 84.9, 92.7, 68.9, 109, 94.5, 82.9, 100), Locatie = c("Wollebrand_Inlaat zwemplas", 
"veilingroute_bovenstroom stuw", "Strijp_inlaat FLORA", "Waterskivijver Wollebrand steiger-vlot", 
"hoofdwatergang_Lange Broekweg nr 78 (?)_tuin", "Wollebrand_Inlaat zwemplas", 
"hoofdwatergang_Lange Broekweg nr 78 (?)_tuin", "veilingroute_bovenstroom stuw", 
"Strijp_inlaat FLORA", "Waterskivijver Wollebrand steiger-vlot", 
"Waterskivijver Wollebrand steiger-vlot", "Wollebrand_Inlaat zwemplas", 
"veilingroute_bovenstroom stuw", "Strijp_inlaat FLORA", "Waterskivijver Wollebrand steiger-vlot", 
NA, "Waterskivijver Wollebrand", NA, "Waterskivijver Wollebrand", 
"Waterskivijver Wollebrand", "Wollebrand_Inlaat zwemplas", "Waterskivijver Wollebrand", 
"Waterskivijver Wollebrand", "Wollebrand_Inlaat zwemplas", "Waterskivijver Wollebrand", 
"Waterskivijver Wollebrand", "Waterskivijver Wollebrand", "Waterskivijver Wollebrand", 
"Wollebrand_Inlaat zwemplas", "Waterskivijver Wollebrand", "Wollebrand_Inlaat zwemplas", 
"Waterskivijver Wollebrand", "Waterskivijver Wollebrand", "Waterskivijver Wollebrand", 
"Waterskivijver Wollebrand", "Wollebrand_Inlaat zwemplas", "Waterskivijver Wollebrand", 
"Waterskivijver Wollebrand", "Waterskivijver Wollebrand", "Wollebrand_Inlaat zwemplas", 
"Wollebrand_Inlaat zwemplas", "Waterskivijver Wollebrand", "Wollebrand_Inlaat zwemplas", 
"Wollebrand_Inlaat zwemplas")), row.names = c(NA, -44L), class = "data.frame")

And we can reduce the problematic code to this:

chloride <- subset(df, Parameter == "chloride - nf - mg/l")
ggplot(data = chloride2, aes(x = Datum, y = as.numeric(as.factor(Waarden))))  
  geom_line(aes(color = Locatie))

Problem

First of all, notice that you create a data frame chloride, but then plot chloride2.

Second, if we look at chloride, we'll see that there are no NAs in there. That is because we took a subset from df where Parameter == "chloride - nf - mg/l", whereas all your NA values in df also had NA for Parameter. Even if you didn't filter them out, ggplot wouldn't create breaks since Location wouldn't match any of the lines it's drawing. We need to add an NA to create a break for each Parameter and each Location.

Correcting just the first problem on our example dataset, we get this plot:enter image description here

Warning / note: I noticed you plot as.numeric(as.factor(Waarden))) on the y-axis, while the legend you used in the example implies raw values. Using the as.numeric(as.factor(...)) trick creates a ranking and I highly doubt that's what you want! Example:

> as.numeric(as.factor( c(12,12,13,14,13) ))
[1] 1 1 2 3 2

Solution

We need to add, either to chloride or to df, a row for each date parameter location combo where we want a break to occur.

I'll pick the skippable dates manually:

skip_dates <- as.Date(c("2017-02-08","2018-02-08","2019-02-08"))

We can generate the parameters and locations to skip on these dates:

skip_parameters <- unique(na.omit(df$Parameter))
skip_location <- unique(na.omit(df$Locatie))

Then we create a data frame of all permutations of these three criteria, and make sure the columns have the same names as those in df:

df_skip <- expand.grid(skip_dates, skip_parameters, skip_location)
colnames(df_skip) <- c("Datum","Parameter","Locatie")
df_skip$Waarden <- NA

Now we have in df_skip a single row for each combo we want to plot a break in:

example df_skip

Finally we add df_skip to the original df and run the plot again:

df <- rbind(df, df_skip)

chloride <- subset(df, Parameter == "chloride - nf - mg/l")
ggplot(data = chloride, aes(x = Datum, y = Waarden))  
  geom_line(aes(color = Locatie))

solution plot

You'll get a warning about missing values, but since those are intentional we can ignore that.

Complete code
skip_dates <- as.Date(c("2017-02-08","2018-02-08","2019-02-08"))
skip_parameters <- unique(na.omit(df$Parameter))
skip_location <- unique(na.omit(df$Locatie))
df_skip <- expand.grid(skip_dates, skip_parameters, skip_location)
colnames(df_skip) <- c("Datum","Parameter","Locatie")
df_skip$Waarden <- NA
df <- rbind(df, df_skip)

chloride <- subset(df, Parameter == "chloride - nf - mg/l")
ggplot(data = chloride, aes(x = Datum, y = Waarden))  
  geom_line(aes(color = Locatie))

CodePudding user response:

Have u cleaned your data first? always clean the data first, filter by the columns you need and then filter the data, you can look at this repo if it helps: https://github.com/Prewishjay13/data-viz/blob/main/App.R

  • Related