Hi,
I need to bars to display in order based on the values of "v" within each group "g". Is this possible? library(ggplot2) set.seed(1) df <- expand.grid(g = 1:4, f = factor(c("a", "b", "c"))) df <- df[-1, ] # some factors are not present in certain groups df$v <- runif(nrow(df)) ggplot(df, aes(x = g, y = v, fill = f)) + geom_bar(position="dodge", stat = "identity") Thanks, Axel. [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
A very dirty solution.
I hope someone can give a better solution: library(ggplot2) set.seed(1) df <- expand.grid(g = factor(1:4), f = factor(c("a", "b", "c"))) df <- df[-1, ] # some factors are not present in certain groups df$v <- runif(nrow(df)) library(dplyr) df <- df %>% arrange(g, desc(v)) df$nv <- with(df, factor(paste(g,f))) df$nv <- factor(df$nv, levels = df$nv) ggplot(df, aes(x = nv , y = v, fill = f)) + geom_bar(position="dodge", stat = "identity") El 14/04/17 a las 10:08, Axel Urbiz escribi�: > Hi, > > I need to bars to display in order based on the values of "v" within each > group "g". Is this possible? > > library(ggplot2) > set.seed(1) > df <- expand.grid(g = 1:4, f = factor(c("a", "b", "c"))) > df <- df[-1, ] # some factors are not present in certain groups > df$v <- runif(nrow(df)) > > ggplot(df, aes(x = g, y = v, fill = f)) + > geom_bar(position="dodge", stat = "identity") > > Thanks, > Axel. > > [[alternative HTML version deleted]] > > ______________________________________________ > [hidden email] mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
Thanks Kenneth. That is the right idea for what I’m after. However, creating a combined factor based on “g” and “f” is creating unwanted spaces between the bars in the plot (I’d like to keep them adjacent within levels of “g” as shown in my first plot).
I had the idea that ordering bars in ggplot with respect to a variable within factor levels would be easier, but looks it is not. Thanks again, Axe. > On Apr 14, 2017, at 10:40 PM, Kenneth Roy Cabrera Torres <[hidden email]> wrote: > > A very dirty solution. > > I hope someone can give a better solution: > > library(ggplot2) > set.seed(1) > df <- expand.grid(g = factor(1:4), f = factor(c("a", "b", "c"))) > df <- df[-1, ] # some factors are not present in certain groups > df$v <- runif(nrow(df)) > > library(dplyr) > > df <- df %>% arrange(g, desc(v)) > df$nv <- with(df, factor(paste(g,f))) > df$nv <- factor(df$nv, levels = df$nv) > > ggplot(df, aes(x = nv , y = v, fill = f)) + > geom_bar(position="dodge", stat = "identity") > > > El 14/04/17 a las 10:08, Axel Urbiz escribi�: >> Hi, >> >> I need to bars to display in order based on the values of "v" within each >> group "g". Is this possible? >> >> library(ggplot2) >> set.seed(1) >> df <- expand.grid(g = 1:4, f = factor(c("a", "b", "c"))) >> df <- df[-1, ] # some factors are not present in certain groups >> df$v <- runif(nrow(df)) >> >> ggplot(df, aes(x = g, y = v, fill = f)) + >> geom_bar(position="dodge", stat = "identity") >> >> Thanks, >> Axel. >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> [hidden email] mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. > > > [[alternative HTML version deleted]] > > ______________________________________________ > [hidden email] mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
In reply to this post by Kenneth Roy Cabrera Torres
Thanks Kenneth. That is the right idea for what I’m after. However,
creating a combined factor based on “g” and “f” is creating unwanted spaces between the bars in the plot (I’d like to keep them adjacent within levels of “g” as shown in my first plot). I had the idea that ordering bars in ggplot with respect to a variable within factor levels would be easier, but looks it is not. Thanks again, Axe. On Apr 14, 2017, at 10:40 PM, Kenneth Roy Cabrera Torres < [hidden email]> wrote: A very dirty solution. I hope someone can give a better solution: library(ggplot2) set.seed(1) df <- expand.grid(g = factor(1:4), f = factor(c("a", "b", "c"))) df <- df[-1, ] # some factors are not present in certain groups df$v <- runif(nrow(df)) library(dplyr) df <- df %>% arrange(g, desc(v)) df$nv <- with(df, factor(paste(g,f))) df$nv <- factor(df$nv, levels = df$nv) ggplot(df, aes(x = nv , y = v, fill = f)) + geom_bar(position="dodge", stat = "identity") El 14/04/17 a las 10:08, Axel Urbiz escribi�: Hi, I need to bars to display in order based on the values of "v" within each group "g". Is this possible? library(ggplot2) set.seed(1) df <- expand.grid(g = 1:4, f = factor(c("a", "b", "c"))) df <- df[-1, ] # some factors are not present in certain groups df$v <- runif(nrow(df)) ggplot(df, aes(x = g, y = v, fill = f)) + geom_bar(position="dodge", stat = "identity") Thanks, Axel. [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. [[alternative HTML version deleted]] ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. |
Free forum by Nabble | Edit this page |