reglage GGPLOT + geom_bar avec option position

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

Elodie Perron
Messages : 19
Enregistré le : 18 Mai 2018, 06:36

reglage GGPLOT + geom_bar avec option position

Messagepar Elodie Perron » 19 Mai 2018, 08:44

Je suis debutante sous R, j'ai cree un graphique qui superpose les temperatures aux precipitations, sous ggplot avec geom_bar comme option. Cependant, j'utilise l'option "position = position_nudge(x=0.4)", pour que les graphiques ne soient pqs l'un sur l'autre. Quand j'utilise cette option, cela change completement la facon de calculer. Par exemple, comme vous pourrez le voir ci-dessous, j'aimerai avoir sur les barplots a droite des dates, un barplot jusqu'a 31/30. Savez-vous comment fqire pour regler ce probleme ? Merci d'avance pour votre aide precieuse.

Ci-dessous mon jeu de donnees:

Code : Tout sélectionner

complet_w <- structure(list(SOUNAME = c("WATERFORD (TYCOR)", "WATERFORD (TYCOR)",
"WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "WATERFORD (TYCOR)",
"WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "WATERFORD (TYCOR)",
"WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "WATERFORD (TYCOR)",
"WATERFORD (TYCOR)"), year_month = c("2014-04", "2014-04", "2014-04",
"2014-04", "2014-05", "2014-05", "2014-05", "2014-05", "2014-06",
"2014-06", "2014-06", "2014-06"), pre_type = c("NONE", "HEAVY",
"LIGHT", "MEDIUM", "NONE", "HEAVY", "LIGHT", "MEDIUM", "NONE",
"HEAVY", "LIGHT", "MEDIUM"), pre_value = c(14, 3, 7, 6, 15, 3,
10, 3, 17, 2, 9, 2), tem_type = c("V_COLD", "COLD", "HOT", "MEDIUM",
"V_COLD", "COLD", "HOT", "MEDIUM", "V_COLD", "COLD", "HOT", "MEDIUM"
), tem_value = c(0, 30, 0, 0, 0, 31, 0, 0, 0, 17, 13, 0), nb_species = c("NA",
"8", "NA", "NA", "NA", "17", "NA", "NA", "NA", "NA", "NA", "NA"
)), .Names = c("SOUNAME", "year_month", "pre_type", "pre_value",
"tem_type", "tem_value", "nb_species"), row.names = c(NA, -12L
), class = c("tbl_df", "tbl", "data.frame"))


Ci-dessous mon code du graphique:

Code : Tout sélectionner

ggplot(data = complet_w, aes(x = complet_w$year_month,
                             y = complet_w$pre_value,
                             fill = complet_w$pre_type, width=0.5), stat = "identity") +
  geom_bar(stat = "identity") +
  xlab("date") + ylab ("Number of days of precipitation") +
  ggtitle("Precipitation per month") + labs(fill = "Frequency") +
  geom_bar(data=complet_w,aes(x=complet_w$year_month,
                              y=complet_w$tem_value,
                              fill=complet_w$tem_type, width=0.1), stat = "identity", position = position_nudge(x=0.4)) +
  xlab("date") + ylab("Number of days of temperature") +
  ggtitle("Temperature per month") + labs(fill = "Frequency")



Je n'arrive pas a afficher l'image depuis mon ordinateur pour vous montrer le résultat... c'est assez rapide à executer avec le code ci-dessus!

Merci d'avance pour votre aide,

Elodie

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: reglage GGPLOT + geom_bar avec option position

Messagepar François Bonnot » 21 Mai 2018, 09:48

Bonjour,
Une solution :

Code : Tout sélectionner

complet_w$x <- rep(1:3,each=4)

ggplot(data = complet_w, aes(x = x, y = pre_value, fill = pre_type), stat = "identity") +
    scale_x_continuous(breaks=1:3, labels=unique(complet_w$year_month)) +
    geom_bar(stat = "identity", width=0.5) +
    xlab("date") + ylab ("Number of days of precipitation") +
    ggtitle("Precipitation per month") + labs(fill = "Frequency") +
    geom_bar(data=complet_w,aes(x=x+0.4, y=tem_value, fill=tem_type), width=0.1, stat = "identity") +
    xlab("date") + ylab("Number of days of temperature") +
    ggtitle("Temperature per month") + labs(fill = "Frequency")
François

Elodie Perron
Messages : 19
Enregistré le : 18 Mai 2018, 06:36

Re: reglage GGPLOT + geom_bar avec option position

Messagepar Elodie Perron » 21 Mai 2018, 10:37

Merci beaucoup pour votre réponse, c'est exactement ce que je souhaitais.

Je cherche également à rajouter des points sur les barplots avec la variable nb_species :

Code : Tout sélectionner

structure(list(SOUNAME = c("WATERFORD (TYCOR)", "WATERFORD (TYCOR)",
"WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "BALLYSHANNON (CATHLEENS FALL)",
"BALLYSHANNON (CATHLEENS FALL)", "BALLYSHANNON (CATHLEENS FALL)",
"BALLYSHANNON (CATHLEENS FALL)", "DUBLIN PHOENIX PARK", "DUBLIN PHOENIX PARK",
"DUBLIN PHOENIX PARK", "DUBLIN PHOENIX PARK", "WATERFORD (TYCOR)",
"WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "WATERFORD (TYCOR)",
"BALLYSHANNON (CATHLEENS FALL)", "BALLYSHANNON (CATHLEENS FALL)",
"BALLYSHANNON (CATHLEENS FALL)", "BALLYSHANNON (CATHLEENS FALL)",
"DUBLIN PHOENIX PARK", "DUBLIN PHOENIX PARK", "DUBLIN PHOENIX PARK",
"DUBLIN PHOENIX PARK", "WATERFORD (TYCOR)", "WATERFORD (TYCOR)",
"WATERFORD (TYCOR)", "WATERFORD (TYCOR)", "BALLYSHANNON (CATHLEENS FALL)",
"BALLYSHANNON (CATHLEENS FALL)", "BALLYSHANNON (CATHLEENS FALL)",
"BALLYSHANNON (CATHLEENS FALL)"), year_month = c("2014-04", "2014-04",
"2014-04", "2014-04", "2014-05", "2014-05", "2014-05", "2014-05",
"2014-05", "2014-05", "2014-05", "2014-05", "2014-05", "2014-05",
"2014-05", "2014-05", "2014-06", "2014-06", "2014-06", "2014-06",
"2014-06", "2014-06", "2014-06", "2014-06", "2014-06", "2014-06",
"2014-06", "2014-06", "2014-07", "2014-07", "2014-07", "2014-07"
), pre_type = c("NONE", "HEAVY", "LIGHT", "MEDIUM", "NONE", "HEAVY",
"LIGHT", "MEDIUM", "NONE", "HEAVY", "LIGHT", "MEDIUM", "NONE",
"HEAVY", "LIGHT", "MEDIUM", "NONE", "HEAVY", "LIGHT", "MEDIUM",
"NONE", "HEAVY", "LIGHT", "MEDIUM", "NONE", "HEAVY", "LIGHT",
"MEDIUM", "NONE", "HEAVY", "LIGHT", "MEDIUM"), pre_value = c(14,
3, 7, 6, 3, 6, 20, 2, 8, 2, 13, 8, 15, 3, 10, 3, 16, 2, 9, 2,
18, 1, 8, 3, 17, 2, 9, 2, 3, 3, 22, 3), tem_type = c("V_COLD",
"COLD", "HOT", "MEDIUM", "V_COLD", "COLD", "HOT", "MEDIUM", "V_COLD",
"COLD", "HOT", "MEDIUM", "V_COLD", "COLD", "HOT", "MEDIUM", "V_COLD",
"COLD", "HOT", "MEDIUM", "V_COLD", "COLD", "HOT", "MEDIUM", "V_COLD",
"COLD", "HOT", "MEDIUM", "V_COLD", "COLD", "HOT", "MEDIUM"),
    tem_value = c(0, 30, 0, 0, 0, 31, 0, 0, 0, 29, 2, 0, 0, 31,
    0, 0, 0, 24, 6, 0, 0, 20, 10, 0, 0, 17, 13, 0, 0, 23, 8,
    0), nb_species = c("NA", "8", "NA", "NA", "NA", "3", "NA",
    "NA", "NA", "19", "NA", "NA", "NA", "17", "NA", "NA", "NA",
    "NA", "NA", "NA", "NA", "10", "NA", "NA", "NA", "NA", "NA",
    "NA", "NA", "NA", "NA", "NA")), .Names = c("SOUNAME", "year_month",
"pre_type", "pre_value", "tem_type", "tem_value", "nb_species"
), row.names = c(NA, -32L), class = c("tbl_df", "tbl", "data.frame"
))


J'ai essayé de les ajouter avec l'option geom_point, mais sans succès... avez-vous une idée?

Elodie Perron
Messages : 19
Enregistré le : 18 Mai 2018, 06:36

Re: reglage GGPLOT + geom_bar avec option position

Messagepar Elodie Perron » 21 Mai 2018, 11:51

J'ai finalement réussi à tracer les points :

Code : Tout sélectionner

ggplot(data = complet_w, aes(x = x, y = pre_value, fill = pre_type), stat = "identity") +
  scale_x_continuous(breaks=1:3, labels=unique(complet_w$year_month)) +
  geom_bar(stat = "identity", width=0.3) +
  xlab("date") + ylab ("Number of days of precipitation") +
  ggtitle("Precipitation per month") + labs(fill = "Frequency") +
  geom_bar(data=complet_w,aes(x=x+0.4, y=tem_value, fill=tem_type), width=0.3, stat = "identity") +
  xlab("date") + ylab("Number of days of temperature") +
  ggtitle("Temperature per month") + labs(fill = "Frequency")+ geom_point( data = complet_w, aes( x= x, y = nb_species), stat = "identity")


Cependant, j'aimerai déplacer les points et l'axe des abscisses (Date) vers la droite (pour la centrer entre les deux barplots). Mais je ne comprends pas très bien comment vous avez-fait pour créer l'axe des abscisses. Est-il possible de déplacer les points et les labels des dates au centre?

Merci d'avance pour votre réponse,

Elodie

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: reglage GGPLOT + geom_bar avec option position

Messagepar François Bonnot » 21 Mai 2018, 11:57

Bonjour,
Je ne comprends pas la question : l'axe des y représente un nombre de jours, cela n'a pas de sens de l'utiliser pour un nombre d'espèces.
François

Elodie Perron
Messages : 19
Enregistré le : 18 Mai 2018, 06:36

Re: reglage GGPLOT + geom_bar avec option position

Messagepar Elodie Perron » 21 Mai 2018, 12:24

Effectivement je me suis mal exprimée, j'aimerai rajouter à gauche de mon graphique un deuxième axe y avec le nombre d'espèces.

Elodie Perron
Messages : 19
Enregistré le : 18 Mai 2018, 06:36

Re: reglage GGPLOT + geom_bar avec option position

Messagepar Elodie Perron » 21 Mai 2018, 12:57

Je ne sais pas si c'est possible sous R d'avoir à gauche pour mon axe y, le nombre de jour et à droite de mon axe y, le nombre d’espèces ?

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: reglage GGPLOT + geom_bar avec option position

Messagepar François Bonnot » 21 Mai 2018, 13:19

Si on ne considère que la syntaxe de R, le code suivant est une solution (mais ce n'est peut-être pas la meilleure façon de représenter les données):

Code : Tout sélectionner

ggplot(data = complet_w, aes(x = x, y = pre_value, fill = pre_type), stat = "identity") +
    scale_x_continuous(breaks=(1:3)+0.2, labels=unique(complet_w$year_month)) +
    geom_bar(stat = "identity", width=0.3) +
    xlab("date") + ylab ("Number of days of precipitation") +
    ggtitle("Precipitation per month") + labs(fill = "Frequency") +
    geom_bar(data=complet_w,aes(x=x+0.4, y=tem_value, fill=tem_type), width=0.3, stat = "identity") +
    xlab("date") + ylab("Number of days of temperature") +
    ggtitle("Temperature per month") + labs(fill = "Frequency") +
    geom_point(aes(x= x+0.2, y = as.numeric(nb_species)), show.legend=FALSE, stat = "identity") +
    scale_y_continuous(sec.axis = sec_axis(~.,name="Number of species"))
François

Elodie Perron
Messages : 19
Enregistré le : 18 Mai 2018, 06:36

Re: reglage GGPLOT + geom_bar avec option position

Messagepar Elodie Perron » 21 Mai 2018, 13:23

Merci beaucoup, c'est exactement ce que je voulais !! Vraiment merci !

Elodie Perron
Messages : 19
Enregistré le : 18 Mai 2018, 06:36

Re: reglage GGPLOT + geom_bar avec option position

Messagepar Elodie Perron » 11 Juin 2018, 11:34

François, je me permets de revenir vers toi concernant la solution que tu m'as donné.
Sais-tu s'il est possible d'avoir des échelles qui varient selon l'axe des Y ?

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Re: reglage GGPLOT + geom_bar avec option position

Messagepar François Bonnot » 19 Juin 2018, 06:58

Une solution consiste à changer les 2 dernières lignes de la façon suivante :

Code : Tout sélectionner

    geom_point(aes(x= x+0.2, y = 1.5*as.numeric(nb_species)), show.legend=FALSE, stat = "identity") +
    scale_y_continuous(sec.axis = sec_axis(~./1.5,name="Number of species"))
François


Retourner vers « Questions en cours »

Qui est en ligne

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