J'ai fait une figure boxplot avec ggplot, mais je veux changer l'ordre de l'axe des y en fonction de l'ordre d'une colonne dans une autre dataframe que j'ai créée en utilisant des statistiques récapitulatives .Ordre boxgot ggplot de l'axe Y basé sur la colonne dataframe
Voici le script. Ci-dessous le script est une description de ma sortie désirée.
#data
df <- data.frame(City = c("NY", "AMS", "BER", "PAR", "NY", "AMS", "AMS", "PAE"),
Time_Diff = c(4, 2, 7, 9, 2, 1, 10, 9),
Outliers = c(0, 0, 0, 0, 0, 1, 1, 0))
#data summary
summary <- df %>%
group_by(City) %>%
summarise(Median = median(Time_Diff),
IQR = IQR(Time_Diff),
Outliers = sum(Outliers)) %>%
arrange(desc(Median), desc(IQR), desc(Outliers))
summary <- as.data.frame(summary)
# Create ggplot object
bp <-ggplot(data = df, aes(x = reorder(City, Time_Diff, FUN = median), y= Time_Diff)) # Creates boxplots
# Create boxplot figure
bp +
geom_boxplot(outlier.shape = NA) + #exclude outliers to increase visibility of graph
coord_flip(ylim = c(0, 25)) +
geom_hline(yintercept = 4) +
ggtitle("Time Difference") +
ylab("Time Difference") +
xlab("City") +
theme_light() +
theme(panel.grid.minor = element_blank(),
panel.border = element_blank(), #remove all border lines
axis.line.x = element_line(size = 0.5, linetype = "solid", colour = "black"), #add x-axis border line
axis.line.y = element_line(size = 0.5, linetype = "solid", colour = "black")) #add y-axis border line
Je voudrais être l'ordre de l'axe y (x-axe basculée) être le même que l'ordre de la colonne dans la ville dataframe sommaire. Cela signifie:
De haut en bas: PAE, PAR, BER, NY, AMS
Toutes les suggestions efficaces et élégantes?
SOLUTION
Merci Prradep, j'ai utilisé votre solution pour le script et il fonctionne. Je l'ai légèrement ajusté, de sorte que je n'ai plus besoin de taper les valeurs de l'axe. J'ai réutilisé le vecteur City à partir de la base de données. Voici le script que je:
#data
df <- data.frame(City = c("NY", "AMS", "BER", "PAR", "NY", "AMS", "AMS", "PAE"),
Time_Diff = c(4, 2, 7, 9, 2, 1, 10, 9),
Outliers = c(0, 0, 0, 0, 0, 1, 1, 0))
#data summary
summary <- df %>%
group_by(City) %>%
summarise(Median = median(Time_Diff),
IQR = IQR(Time_Diff),
Outliers = sum(Outliers)) %>%
arrange(desc(Median), desc(IQR), desc(Outliers))
summary <- as.data.frame(summary)
# Preproces data for figure
order_city <- summary$City
# Create ggplot object
bp <-ggplot(data = df, aes(x = reorder(City, Time_Diff, FUN = median), y= Time_Diff)) # Creates boxplots
# Create boxplot figure
bp +
geom_boxplot(outlier.shape = NA) + #exclude outliers to increase visibility of graph
coord_flip(ylim = c(0, 25)) +
geom_hline(yintercept = 4) +
ggtitle("Time Difference") +
ylab("Time Difference") +
xlab("City") +
theme_light() +
theme(panel.grid.minor = element_blank(),
panel.border = element_blank(), #remove all border lines
axis.line.x = element_line(size = 0.5, linetype = "solid", colour = "black"), #add x-axis border line
axis.line.y = element_line(size = 0.5, linetype = "solid", colour = "black")) + #add y-axis
scale_x_discrete(limits = rev(order_city)) #this is the function to change the order of the axis
Merci! J'ai utilisé une légère modification de votre code pour la solution finale. Voir mon problème pour le code – SHW