Quantcast

Can this be done in ggplot?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Can this be done in ggplot?

Axel Urbiz
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.
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Can this be done in ggplot?

Kenneth Roy Cabrera Torres
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.
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Can this be done in ggplot?

Axel Urbiz
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.
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Can this be done in ggplot?

Axel Urbiz
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.
Loading...