Ajouter deux légendes séparées (fonction: geom_line et geom_vline) avec un axe x de type POSIXct

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Clement Corentin
Messages : 44
Enregistré le : 09 Aoû 2011, 08:55

Ajouter deux légendes séparées (fonction: geom_line et geom_vline) avec un axe x de type POSIXct

Messagepar Clement Corentin » 30 Aoû 2018, 14:04

Bonjour,

Je n’arrive pas à résoudre le problème suivant.
Je dispose d'une base de données simple (Nb Plot;Crop type; Date;Height;Growth Stage) que je re-manipule pour calculer une moyenne et écart type. Le code est ci-dessous:

Code : Tout sélectionner

library(ggplot2)
library(xts)
library(dplyr)
library(scales)

#Load data set
data <- as.data.frame(read.csv("xx",sep=";",header=TRUE))
attach(data)
data$Date<-as.POSIXct(data$Date,format="%d-%m-%Y",tz="UTC")

#Calculate mean and standard error
  df <- data %>%
  group_by(Crop.type,Date,Growth.stage) %>%
  summarise(mean = mean(Height),
            std = sd(Height))


Ensuite, je souhaite obtenir un graphique avec des limites en x et des barres verticales à différentes dates. Et ensuite, je plot mon graphique en utilisant la fonction ggplot.

Code : Tout sélectionner

#Xlimits et barre verticales
lims <- as.POSIXct(strptime(c("2018-05-01","2018-09-01"), format = "%Y-%m-%d"))   
first_harvest <- as.POSIXct(strptime(c("2018-06-21"), format = "%Y-%m-%d"))
Second_harvest <- as.POSIXct(strptime(c("2018-08-215"), format = "%Y-%m-%d"))

#Plot
ggplot(df, aes(x =Date, y =mean,colour=Crop.type)) +
      geom_point()+
      geom_line()+
      scale_x_datetime(breaks = date_breaks("10 days"),labels = date_format("%d/%m"),limits = lims)+
      geom_text(aes(label=Growth.stage),hjust=0.5,vjust=-3,size=3)+
      geom_errorbar(aes(ymax=df$mean+df$std,ymin=df$mean-df$std),width=1.6)+
      labs(x = "Date", y="Crop height (cm)",title="Crop heigth & Growing stage - Average value")+
      geom_vline(aes(xintercept=first_harvest)),linetype="dashed")+
      geom_vline(aes(xintercept=Second_harvest))


J'obtiens le graphique que je veux mais impossible d'obtenir la légende pour mes deux lignes geom_vline! J'ai utilisé les fonction scale et guide mais rien n'apparait sur mon graphique et je crois que cela vient du fait que mon axe des x est au format POSIXct.

Est-ce que quelqu'un a déjà rencontre ce problème?
Merci d’avance pour votre aide.
Corentin

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Re: Ajouter deux légendes séparées (fonction: geom_line et geom_vline) avec un axe x de type POSIXct

Messagepar Stéphane Laurent » 01 Sep 2018, 13:41

Bonjour,

Je ne pense pas que ce soit dû à POSIXct.

Voilà un exemple. Le truc c'est que j'utilise un deuxième dataframe pour le geom_vline.

Code : Tout sélectionner

a1 = exp(seq(1:3))
a2 = exp(seq(1:3) + 0.2)
a3 = exp(seq(1:3) + 0.4)
df <- data.frame(coefficients = c(a1, a2, a3), order = rep(1:3, 3),
                norm = factor(rep(1:3, each = 3),
                              labels =  c("L1", "L2", "Linf")))
df2 <- data.frame(x= c(10,20), harvest=c("first", "second"))
ggplot(df, aes(x = order, y = coefficients, colour = norm, shape = norm)) +
  geom_line() + geom_point() +
  geom_vline(data=df2, aes(xintercept=x, linetype=harvest))


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron