thank you so much! It work perfectly
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
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()
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")
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
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.

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.
look at the bottom figures of https://digibio.blogspot.com/2020/07/control-grouped-barcharts-in-ggplot.html
Log in to answer this question.


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