Выбор отфильтрованных данных для усов на панели ошибок в ggplot2? - PullRequest
0 голосов
/ 01 октября 2018

Образец набора данных:

sample <- structure(list(NAME = c("WEST YORKSHIRE", "WEST YORKSHIRE", "WEST YORKSHIRE", 
"WEST YORKSHIRE", "WEST YORKSHIRE", "WEST YORKSHIRE", "NOTTINGHAMSHIRE", 
"NOTTINGHAMSHIRE", "NOTTINGHAMSHIRE", "NOTTINGHAMSHIRE", "NOTTINGHAMSHIRE", 
"NOTTINGHAMSHIRE"), ACH_DATE = structure(c(17410, 17410, 17410, 
17440, 17440, 17440, 17410, 17410, 17410, 17440, 17440, 17440
), class = "Date"), MEASURE = c("DIAG_RATE_65_PLUS", "DIAG_RATE_65_PLUS_LL", 
"DIAG_RATE_65_PLUS_UL", "DIAG_RATE_65_PLUS", "DIAG_RATE_65_PLUS_LL", 
"DIAG_RATE_65_PLUS_UL", "DIAG_RATE_65_PLUS", "DIAG_RATE_65_PLUS_LL", 
"DIAG_RATE_65_PLUS_UL", "DIAG_RATE_65_PLUS", "DIAG_RATE_65_PLUS_LL", 
"DIAG_RATE_65_PLUS_UL"), VALUE = c(73.6, 66.2, 79.8, 73.7, 66.3, 
80, 77, 69.1, 83.6, 77.5, 69.6, 84.2)), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -12L))

Я пытаюсь визуализировать панели ошибок для точек, показанных здесь:

sample %>% filter(MEASURE == "DIAG_RATE_65_PLUS") %>% ggplot(aes(x=ACH_DATE, y=VALUE, group=ACH_DATE)) +
  geom_dotplot(binaxis = "y", stackdir = "center", dotsize=0.2)

Как вы можете видеть в нижней части иверхние пределы содержатся в переменной MEASURE с интересующими меня точками в длинном формате.

Я застрял в том, как я могу отфильтровать df дальше, чтобы использовать нижние и верхние предельные значения вymin и ymax аргументы.

Я пробовал что-то вроде:

sample %>% filter(MEASURE == "DIAG_RATE_65_PLUS") %>% ggplot(aes(x=ACH_DATE, y=VALUE, group=ACH_DATE)) +
  geom_dotplot(binaxis = "y", stackdir = "center", dotsize=0.2) +
  geom_errorbar(aes(x = ACH_DATE,
                    ymin = sample %>% filter(MEASURE == "DIAG_RATE_65_PLUS_LL") %>% select(VALUE),
                    ymax = sample %>% filter(MEASURE == "DIAG_RATE_65_PLUS_UL") %>% select(VALUE)),
                data = sample %>% filter(MEASURE != "DIAG_RATE_65_PLUS"),
                colour="red")

, который выдает ошибку: Error: Columns `ymin`, `ymax` must be 1d atomic vectors or lists.Я пытался обернуть свои входные данные в аргументы ymin и ymax с помощью as.vector, но, похоже, это не помогает.

1 Ответ

0 голосов
/ 01 октября 2018

ggplot, как и другие библиотеки tidyverse, работает с нестандартной оценкой .Он ожидает пустых имен столбцов фрейма данных в таких аргументах, как ymin.Вместо этого вы предоставили фрейм данных только с одним столбцом: dplyr::select возвращает фрейм данных / таблицу с указанными столбцами, следовательно, возникает ошибка необходимости указывать вектор.

sample %>% filter(MEASURE == "DIAG_RATE_65_PLUS_LL") %>% select(VALUE)
#> # A tibble: 4 x 1
#>   VALUE
#>   <dbl>
#> 1  66.2
#> 2  66.3
#> 3  69.1
#> 4  69.6

Если вы действительно хотелиЧтобы использовать этот метод, состоящий из всех ваших типов мер в одном столбце и фильтрации для разных типов, dplyr::pull принимает имя одного столбца и возвращает данные в этом столбце в виде вектора.

Однако существует несколькопроблемы, которые вы пытаетесь решить в этом фрейме данных, которые вы, вероятно, должны отделить.У вас есть значения наблюдения (средние значения, медианы или что-то еще), у вас есть верхние пределы доверительного интервала, и у вас есть более низкие пределы доверительного интервала.В то время как ответы на ggplot проблемы - это часто данные с длинным формированием, это тот случай, когда это три разные проблемы, которые имеют разные места на вашем графике - поэтому вам лучше сделать их отдельными столбцами,Вы можете сделать это с помощью tidyr::spread.

library(dplyr)
library(ggplot2)

sample %>%
  tidyr::spread(key = MEASURE, value = VALUE)
#> # A tibble: 4 x 5
#>   NAME     ACH_DATE   DIAG_RATE_65_PL… DIAG_RATE_65_PLU… DIAG_RATE_65_PLU…
#>   <chr>    <date>                <dbl>             <dbl>             <dbl>
#> 1 NOTTING… 2017-09-01             77                69.1              83.6
#> 2 NOTTING… 2017-10-01             77.5              69.6              84.2
#> 3 WEST YO… 2017-09-01             73.6              66.2              79.8
#> 4 WEST YO… 2017-10-01             73.7              66.3              80

и затем использовать те отдельные столбцы, которые имеют разные цели для соответствующих частей ваших geoms.

sample %>%
  tidyr::spread(key = MEASURE, value = VALUE) %>%
  ggplot(aes(x = ACH_DATE, y = DIAG_RATE_65_PLUS, group = ACH_DATE)) +
    geom_dotplot(binaxis = "y") +
    geom_errorbar(aes(ymin = DIAG_RATE_65_PLUS_LL, ymax = DIAG_RATE_65_PLUS_UL))
#> `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.

Создано в 2018-10-01 для пакета Представить (v0.2.1)

...