web-dev-qa-db-fra.com

Combinaison de graphiques à barres et à lignes (double axe) dans ggplot2

J'ai double-y-axis graphique réalisé en Excel. Dans Excel, il ne nécessite que des compétences de base. Ce que je voudrais faire, c'est répliquer ce graphique en utilisant le ggplot2 bibliothèque dans R.

enter image description here

Je l'ai déjà fait, mais je dois tracer la réponse sur 2nd-y-axis.

enter image description here

Je joins le code reproductible que j'ai utilisé:

#Data generation
Year <- c(2014, 2015, 2016)
Response <- c(1000, 1100, 1200)
Rate <- c(0.75, 0.42, 0.80)

df <- data.frame(Year, Response, Rate)

#Chart
library(ggplot2)

ggplot(df)  + 
  geom_bar(aes(x=Year, y=Response),stat="identity", fill="tan1", colour="sienna3")+
  geom_line(aes(x=Year, y=Rate),stat="identity")+
  geom_text(aes(label=Rate, x=Year, y=Rate), colour="black")+
  geom_text(aes(label=Response, x=Year, y=0.9*Response), colour="black")
16
AK47

Commencez par mettre à l'échelle Rate par Rate*max(df$Response) et modifiez l'échelle 0.9 Du texte de réponse.

Deuxièmement, incluez un deuxième axe via scale_y_continuous(sec.axis=...):

ggplot(df)  + 
    geom_bar(aes(x=Year, y=Response),stat="identity", fill="tan1", colour="sienna3")+
    geom_line(aes(x=Year, y=Rate*max(df$Response)),stat="identity")+
    geom_text(aes(label=Rate, x=Year, y=Rate*max(df$Response)), colour="black")+
    geom_text(aes(label=Response, x=Year, y=0.95*Response), colour="black")+
    scale_y_continuous(sec.axis = sec_axis(~./max(df$Response)))

Ce qui donne:

enter image description here

22
setempler