как использовать ggplot2 :: scale_x_yearqtr - PullRequest
0 голосов
/ 21 апреля 2020

Я бы хотел изобразить случаи чего-то на четверть на гистограмме. Я использую тип zoo::yearqtr для классификации кварталов, но кадр данных - это не зоопарк. Я предполагал, что ggplot2::scale_x_yearqtr() даст мне симпатичный сюжет, но я получил мутацию. В верхнем примере я использую as.factor, чтобы получить желаемый вид, но, поскольку время непрерывно, это кажется плохой практикой, плюс хлопоты вручную вычислять разумные разрывы.

library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 3.6.3
library(zoo)
#> 
#> Attaching package: 'zoo'
#> The following objects are masked from 'package:base':
#> 
#>     as.Date, as.Date.numeric
date <- c(2016.00,2016.50, 2016.50, 2016.75, 2017.75, 2019.00, 2016.00, 2016.25,
          2016.50, 2016.75, 2017.00, 2017.25, 2017.50, 2017.75, 2018.00, 2018.25,
          2018.50, 2018.75, 2019.00, 2019.25, 2019.50, 2019.75)

count <-  c(3, 3,  4,  6,  3,  3,  3, 10,  2,  6,  4,
            7,  4,  4,  3,  5,  2,  5,  6,  4,  6,  3)

fill <- c("polka","waltz","polka","polka","waltz","samba","other","other","other",
          "other","other","other","other","other","other","other","other","other",
          "other","other","other","other")

# dates are duplicated (but with different events) and not ordered
df0 <- data.frame(date,count,fill)

ggplot(df0,aes(factor(as.numeric(date)),count,fill=fill)) + geom_col() + 
  scale_x_discrete(breaks=sort(unique(round(as.numeric(df0$date)))))

proper bar plot

Прекрасно. Теперь давайте сделаем столбец даты типом yearqtr и используем scale_x_yearqtr, чтобы получить хорошую ось X.

df1 <-  df0
df1$date <- zoo::as.yearqtr(df1$date)
ggplot(df1,aes(date,count,fill=fill)) + geom_col() + 
  scale_x_yearqtr()

mutant plot

Вау ! Это один уродливый мутант! Проблема не в yearqtr, а в root. Я получаю тот же результат, если мы не преобразуем numeric даты в yearqtr. Проблема в том, что я scale_x_yearqtr понял бы, что делать. Есть ли правильный способ получить нужную ось х, не прибегая к as.factor()?

РЕДАКТИРОВАТЬ: показать результат ответа Маркуса в моей системе

> df0
      date count  fill
1  2016.00     3 polka
2  2016.50     3 waltz
3  2016.50     4 polka
4  2016.75     6 polka
5  2017.75     3 waltz
6  2019.00     3 samba
7  2016.00     3 other
8  2016.25    10 other
9  2016.50     2 other
10 2016.75     6 other
11 2017.00     4 other
12 2017.25     7 other
13 2017.50     4 other
14 2017.75     4 other
15 2018.00     3 other
16 2018.25     5 other
17 2018.50     2 other
18 2018.75     5 other
19 2019.00     6 other
20 2019.25     4 other
21 2019.50     6 other
22 2019.75     3 other
> ggplot(df0,aes(date,count,fill=fill)) + geom_col() + 
  scale_x_yearqtr()

plot with unmodifed data as double

> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] zoo_1.8-7     ggplot2_3.3.0

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.4.6     compiler_3.6.1   pillar_1.4.3     later_1.0.0      tools_3.6.1      digest_0.6.25   
 [7] packrat_0.5.0    lattice_0.20-38  memoise_1.1.0    lifecycle_0.2.0  tibble_3.0.0     gtable_0.3.0    
[13] pkgconfig_2.0.3  rlang_0.4.5      shiny_1.4.0.2    cli_2.0.2        rstudioapi_0.11  fastmap_1.0.1   
[19] withr_2.1.2      dplyr_0.8.5      stringr_1.4.0    vctrs_0.2.4      grid_3.6.1       tidyselect_1.0.0
[25] glue_1.4.0       R6_2.4.1         fansi_0.4.1      farver_2.0.3     purrr_0.3.3      magrittr_1.5    
[31] scales_1.1.0     promises_1.1.0   ellipsis_0.3.0   htmltools_0.4.0  ggthemes_4.2.0   assertthat_0.2.1
[37] mime_0.9         xtable_1.8-4     colorspace_1.4-1 httpuv_1.5.2     labeling_0.3     stringi_1.4.6   
[43] munsell_0.5.0    crayon_1.3.4  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...