Skip to content

Commit

Permalink
Added squishing and padding to readme
Browse files Browse the repository at this point in the history
Included a remark to r-lib/evaluate#59 on behalf the scrambled => unicode character on windows
  • Loading branch information
ugzvot committed Sep 12, 2019
1 parent f36eacc commit 6a82b11
Show file tree
Hide file tree
Showing 106 changed files with 628 additions and 339 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Package: rOstluft.plot
Type: Package
Title: Ploting air quality data
Version: 0.0.0.9006
Version: 0.0.0.9007
Authors@R: c(
person("Thomas", "von Allmen", email = "[email protected]", role = c("aut", "cre")),
person("Jörg", "Sintermann", role = c("aut")),
Expand Down
3 changes: 3 additions & 0 deletions R/cutfuns.R
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ cut_wd.fun <- function(binwidth = 45, ...) { # in helpers verschieben
#' cut_ws(ws, binwidth = 2, ws_max = 5, squish = FALSE)
#'
#' # close the intervals on the left side
#' # unfortunately there is a issue in converting the console output to
#' # html: the unicode character for >= gets scrambled to =
#' # https://github.com/r-lib/evaluate/issues/59
#' cut_ws(ws, binwidth = 2, ws_max = 5, right = FALSE)
#'
#' # reverse the order of the factors, useful for legends while plotting
Expand Down
89 changes: 86 additions & 3 deletions README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -52,15 +52,16 @@ data <-





## Windrose auf Karte

```{r}
bb <- bbox_lv95(2683141, 1249040, 500)
bg <- get_stamen_map(bb)
ggwindrose(data, ws, wd, ws_max = 4, bg = bg)
ggwindrose(data, ws, wd, ws_max = 4, bg = bg) +
theme(
panel.grid.major = element_line(linetype = 2, color = "black", size = 0.5)
)
groupings = rOstluft.plot::groups(daylight)
Expand Down Expand Up @@ -158,7 +159,89 @@ traj <- dplyr::filter(traj, date < lubridate::ymd("2017-01-08"))
ggtraj(traj, color_scale = ggplot2::scale_color_viridis_c(name = "m agl."))
```

## Squishing data

Messdaten enthalten oft Extremwerte von ausserordentlichen Episoden oder Ereignissen. Als Beispiel Feuwerwerke oder Inversionen in den PM10 Daten:


```{r fig.asp= 1}
ggyearday(data, time = date, z = PM10)
```

In einem ggplot2 Diagramm kann bei continuous scales mit Hilfe dem Argument `oob` eine Funktion übergeben werden, was mit Werten ausserhalb des Limits geschieht. Mit Hilfe der Funktion [`scales::squish()`](https://scales.r-lib.org/reference/squish.html) werden diese Werte auf das Minima, bzw. Maxima der Limits gesetzt. In rOstluft.plot sind die Hilfsfunktionen `scale_fill_viridis_squished()`, `scale_color_viridis_squished()`, `scale_fill_gradientn_squished()` und `scale_color_gradientn_squished()` enthalten:

```{r fig.asp=1}
fill_scale <- scale_fill_viridis_squished(
breaks=c(0, 20, 40, 60, 80),
limits = c(0, 80),
direction = -1,
na.value = NA,
option = "A"
)
ggyearday(data, time = date, z = PM10, fill_scale = fill_scale)
```

Teilweise ist es für Klassierungen praktisch alle Werte über einem Maximum in einer zusätzlichen Klasse zusammen zu fassen. Die Funktion `cut_ws()` beinhaltet diese Funktionalität, hat jedoch gewisse Einschränkungen (Negative Werte werden zu NA, Breite der Klasse fix):

```{r}
pm10_right <- cut_ws(data$PM10, binwidth = 20, ws_max = 80)
table(pm10_right)
pm10_left <- cut_ws(data$PM10, 20, 80, right = FALSE)
# bei der Umwandlung der Ausgabe nach HTML wird "≥80" in "=80"
# umgewandelt. In Diagrammen und der R Konsole wird das Zeichen
# jedoch korrekt dargestellt. See https://github.com/r-lib/evaluate/issues/59
table(pm10_left)
```

Für mehr Flexibilät kann direkt `base::cut()` verwendet werden und breaks mit `-Inf` und `Inf` definiert werden.
```{r}
breaks <- c(-Inf, 0, 19, 41, 66, 80, Inf)
pm10_cut <- cut(data$PM10, breaks = breaks, right = TRUE, include.lowest = TRUE)
table(pm10_cut)
```


## padding data

Messdaten liegen nicht immer in vollständigen Zeitreihen vor. Für einige Diagramme ist es jedoch erforderlich, dass für alle Zeitpunkte ein Wert oder ein NA vorhanden ist. Für Daten im rolf Format können die rOstluft Funktionen `rOstluft::pad()` und `rOstluft::pad_year()` verwenden werden. rOstluft.plot enthält 2 generische padding Funktionen:

```{r}
fn <- rOstluft.data::f("Zch_Stampfenbachstrasse_min30_2013_Jan.csv")
january <- rOstluft::read_airmo_csv(fn)
january_oa <- rOstluft::rolf_to_openair(january
)
tail(january_oa)
# site mit "Zch_Stampfenbachstrasse" füllen
pad_to_year(january_oa, date, "30 min", fill = list(site = "Zch_Stampfenbachstrasse")) %>%
tail()
# automatisch alle factor/character columns füllen
pad_to_year_fill(january_oa, date, "30 min") %>%
tail()
pad_to_year_fill(january, starttime, "30 min") %>%
tail()
# enthalten die Daten jedoch eine Klassifizierungs Spalte
# muss man die zu füllenden Spalten explixit angeben
january_oa <- openair::cutData(january_oa, "month") %>%
dplyr::select(date, month, dplyr::everything())
# Monats Spalte wird falscherweise mit Januar gefüllt
# Ausserdem würden für jeden Monat die Daten multipliziert
pad_to_year_fill(january_oa, date, "30 min") %>%
tail()
# mit explixiter Defintion der zu füllenden Spalten klappt es
pad_to_year_fill(january_oa, date, "30 min", site) %>%
tail()
```



Loading

0 comments on commit 6a82b11

Please sign in to comment.