This is a test version of Biostars. For the public version, visit https://www.biostars.org.
geom_bar plot with several variables

Hi all, I need your help. I am struggling on getting a bar plot with ggplot2 package.

Imagine I have 3 different variables (which would be my y values in aes) that I want to plot for each of my samples (x aes):

 str(df) 
'data.frame':   4 obs. of  4 variables:
 $ samples: Factor w/ 4 levels "S1","S2","S3",..: 1 2 3 4
 $ v1     : int  234 189 167 235
 $ v2     : int  345 265 235 254
 $ v3     : int  54 48 32 645

I would like to have a barplot in which I have a group per sample (4), each of them with 3 bars, one for each variable (12 bars in total). I know that if I want to extract the height from the df I have to call for stat = "identity". So far this has been my guess, but it's not working properly:

n <- ggplot(df) + 
  geom_bar(mapping = aes(x = samples, y = v1), stat = "identity", position = "dodge") + 
  geom_bar(mapping = aes(x = samples, y = v2), stat = "identity", position = "dodge") +
  geom_bar(mapping = aes(x = samples, y = v3), stat = "identity", position = "dodge")

Could you please help me?

Thanks before hand

r ggplot2

4 observation of 4 variables: I have Type position in more variable (20),how to give minimum variable(5)

1 answer

with iris data : 4 observation of 4 variables:

data(iris)
library(ggplot2)
library(tidyr)

iris %>%
  gather("Type", "Value",-Species) %>%
  ggplot(aes(Species, Value, fill = Type)) +
  geom_bar(position = "dodge", stat = "identity") +
  theme_bw()

Rplot

Separate boxes for each species:

iris %>%
  gather("Type", "Value",-Species) %>%
  ggplot(aes(Species, Value, fill = Type)) +
  geom_col(position = "dodge") +
  theme_bw()+
  facet_wrap(~Species,scales = "free_x")

Rplot01

input (for one species, likewise for rest two species):

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

thank you so much! It work perfectly

I have moved cpad0112's comment to an answer.

If an answer was helpful, you should upvote it; if the answer resolved your question, you should mark it as accepted. You can accept more than one if they work.

Upvote|Bookmark|Accept

Please do the same for your previous posts as well.

Hi, Wonderful explanations. Thanks! But like to know how to rearrange the variables in the each box. for example, petal.length, sepal.length, petal.width, sepal.width

Also how about display in descending order. Thanks

You can re-order these by converting them to [ordered] factors in the input data.

Log in to answer this question.