ikempf
ikempf

Reputation: 165

Formatting of grouped bar chart in ggplot

I am currently stuck on formatting a grouped bar chart.

I have a dataframe, which I would like to visualize:

  iteration  position value
1         1   eEP_SRO 20346
2         1 eEP_drift 22410
3         1  eEP_hole 29626
4         2   eEP_SRO 35884
5         2 eEP_drift 39424
6         2  eEP_hole 51491
7         3   eEP_SRO 51516
8         3 eEP_drift 55523
9         3  eEP_hole 74403

The position should be shown as color and the value should be represented in the height of the bar.

My code is:

fig <- ggplot(df_eEP_Location_plot, aes(fill=position, y=value, x=iteration, order=position)) + 
  geom_bar(stat="identity")

which gives me this result:

enter image description here

I would like to have a correct y-axis labelling and would also like to sort my bars from largest to smallest (ignoring the iteration number). How can I achieve this?

Thank you very much for your help!

Upvotes: 0

Views: 66

Answers (1)

igutierrez
igutierrez

Reputation: 123

I would recommend using fct_reorder from the forcats package to reorder your iterations along the specified values prior to plotting in ggplot. See the following with the sample data you've provided:

library(ggplot2)
library(forcats)
iteration <- factor(c(1,1,1,2,2,2,3,3,3))
position <- factor(rep(c("eEP_SRO","eEP_drift","eEP_hole")))
value <- c(20346,22410,29626,35884,39424,51491,51516,55523,74403)
df_eEP_Location_plot <- data.frame(iteration, position, value)
df_eEP_Location_plot$iteration <- fct_reorder(df_eEP_Location_plot$iteration, 
                                              -df_eEP_Location_plot$value)
fig <- ggplot(df_eEP_Location_plot, aes(y=value, x=iteration, fill=position)) + 
  geom_bar(stat="identity")
fig    

fig

Upvotes: 1

Related Questions