6
votes

R - GGPLOT2 Série TIME X-Axe à montrer le dernier jour du mois

Pourquoi GGPLOT continue-t-il à me donner le premier jour du mois puis complotez une série chronologique.
Voici un échantillon de mon code:

library(ggplot2)
library(dplyr)
date <- as.Date(c("2008-01-31",
"2008-02-29",
"2008-03-31",
"2008-04-30",
"2008-05-31"))


count <- sample(5)
df <- data.frame(date = date, count = count)
df %>% 
  ggplot(aes(x = date, y = count))+
  geom_line()+
  scale_x_date(date_breaks = "1 month",
               date_labels = '%m/%d')  


0 commentaires

3 Réponses :


4
votes

Suppression date_breaks code> et ajout ruptures = df $ DATE code> semble donner le résultat souhaité.

df <- data.frame(date = as.POSIXct(date), count = count)
df %>% 
  ggplot(aes(x = date, y = count)) +
  geom_line() +
  scale_x_datetime(breaks = df$date, date_labels = '%m/%d') 


0 commentaires

4
votes

vous et ggplot pense aux dates différemment.

Vous pensez aux dates comme des étiquettes. Dans votre exemple, vous avez 5 choses que vous souhaitez tracer dans l'ordre, et ces étiquettes doivent apparaître sur l'axe.

ggplot pense aux dates comme des dates. Si vous ne l'avez donné que les valeurs 2 et 5, comme ils sont numériques, il ajouterait tous les points entre eux, par exemple. 2,5, 3, 4, etc. Depuis que vous avez donné des dates, il colle toutes les dates entre aussi.

Les étiquettes de l'axe s'éteignent dans la plage de l'axe et n'ont rien à voir avec le variable. Il a placé les dates dans le bon endroit, mais a choisi les étiquettes d'axe lui-même.

Cela vous laisse avec deux options

1.

Si vous voulez Stick avec le type de données "Date", échangez l'option date_break avec juste casse et spécifiez la plage de ce que vous voulez. par exemple xxx

2.

Si vous voulez réellement que ce soit des étiquettes (par exemple, vous ne voulez pas mettre de points entre ces dates), considérez-vous Fabrication date un facteur et simplement tracer cela. xxx

emballage as.numérique autour de la date du AES argument convertit le facteur en numérique (il convient donc à une ligne entre la ligne), nous devons alors simplement définir l'étiquette à ce que nous voulons que ce soit, ce que ce soit, qui nécessite la convertir à une date puis la formatage de la forme en mois / jour.


0 commentaires

6
votes

Peut-être que la solution la plus simple est simplement d'utiliser pauses code> au lieu de date_breaks code>, en référence directement à votre colonne de dates dans la Dataframe.

df %>% 
  ggplot(aes(x = date, y = count))+
  geom_line()+
  scale_x_date(date_labels = '%m/%d', breaks = df$date)


0 commentaires