sbihorel
2015-Oct-29 16:26 UTC
[R] Achieve independent fine user control of ggplot geom settings when using groups in multiple geom's
Hello, Before I get to my question, I want to make clear that the topic of my present post is similar to posts I recently submitted to the list. Although I appreciate the replies I got, I believe that I did not correctly frame these previous posts to get to the bottom of things. I also want to make clear that the code example that I have inserted in this post is meant to illustrate my points/questions and does not reflect a particular interest in the data or the sequence of ggplot geom's used (except otherwise mentioned). Actually, I purposefully used junk meaningless data, geom's sequence, and settings, so that we agree the plot is ugly and that we, hopefully, don't get hang on specifics and start discussing about the merit of one approach vs another. So here are my questions: 1- Can a user independently control the settings of each geom's used in a ggplot call sequence when grouping is required? By control, I mean: user defines the graphical settings (groups, symbol shapes, colors, fill colors, line types, size scales, and alpha) and does not let ggplot choose these settings from some theme default. By independently, I mean: the set of graphical settings can be totally different from one group to the next and from one geom to the next. If this fine control can be achieved, how would you go about it (please, be assured that I already spent hours miserably failing to get to anything remotely productive, so your help would be really appreciated)? library(dplyr) library(tidyr) library(ggplot2) set.seed(1234) dummy <- data.frame(dummy = numeric()) data <- data.frame(x1 = rep(-2:2, each = 80) + rnorm(4000, sd = 0.1), g1 = rep(1:4, each = 1000)) data <- data %>% mutate(y1 = -x1^2 + 2*x1 - 2 + g1 + rnorm(4000, sd = 0.25)) data2 <- data %>% select(x2=x1, y2=y1, g2=g1) %>% mutate(x2=-x2) data3 <- data.frame(x3 = sample(seq(-2, 2, by = 0.1), 20, replace = TRUE), y3 = runif(20, min=-8, max=4), g3 = rep(1:4, each = 5)) %>% group_by(g3) %>% arrange(x3) gplot <- ggplot(dummy) ### I know this line is not necessary in this particular example, please assume this is relevantin the actual framework I am trying to build gplot <- gplot + geom_smooth(data = data2, aes(x2, y2, group = g2, color = factor(g2), linetype = factor(g2), size = 0.5*g2), method = 'loess') + geom_path(data = data3, aes(x3, y3, group = g3, color = factor(g3), linetype = factor(g3), shape = factor(g3), size = 0.5*g3)) + geom_point(data = data, aes(x1, y1, group = g1, color = factor(g1), fill = factor(g1), shape = factor(g1), size = g1)) gplot 2- Is the situation easier or more complex (ie, does ggplot make some decisions/assumptions for the user?) if the same x, y, and group variables are used in different geom's but the user still wants to provide independently graphical settings for each geom? Thank you Sebastien
Ista Zahn
2015-Oct-29 17:34 UTC
[R] Achieve independent fine user control of ggplot geom settings when using groups in multiple geom's
I would say in a word, 'no'. What you seem to be implying is that you want multiple color scales, multiple shape scales, etc. As far as I know there is no support for that in ggplot2. Perhaps if you show us what you're actually trying to accomplish someone can suggest a solution or at least a work-around. Best, Ista On Thu, Oct 29, 2015 at 12:26 PM, sbihorel <Sebastien.Bihorel at cognigencorp.com> wrote:> Hello, > > Before I get to my question, I want to make clear that the topic of my > present post is similar to posts I recently submitted to the list. Although > I appreciate the replies I got, I believe that I did not correctly frame > these previous posts to get to the bottom of things. > I also want to make clear that the code example that I have inserted in this > post is meant to illustrate my points/questions and does not reflect a > particular interest in the data or the sequence of ggplot geom's used > (except otherwise mentioned). Actually, I purposefully used junk meaningless > data, geom's sequence, and settings, so that we agree the plot is ugly and > that we, hopefully, don't get hang on specifics and start discussing about > the merit of one approach vs another. > > So here are my questions: > > 1- Can a user independently control the settings of each geom's used in a > ggplot call sequence when grouping is required? > > By control, I mean: user defines the graphical settings (groups, symbol > shapes, colors, fill colors, line types, size scales, and alpha) and does > not let ggplot choose these settings from some theme default. > By independently, I mean: the set of graphical settings can be totally > different from one group to the next and from one geom to the next. > > If this fine control can be achieved, how would you go about it (please, be > assured that I already spent hours miserably failing to get to anything > remotely productive, so your help would be really appreciated)? > > library(dplyr) > library(tidyr) > library(ggplot2) > set.seed(1234) > dummy <- data.frame(dummy = numeric()) > data <- data.frame(x1 = rep(-2:2, each = 80) + rnorm(4000, sd = 0.1), > g1 = rep(1:4, each = 1000)) > data <- data %>% mutate(y1 = -x1^2 + 2*x1 - 2 + g1 + rnorm(4000, sd = 0.25)) > data2 <- data %>% select(x2=x1, y2=y1, g2=g1) %>% mutate(x2=-x2) > data3 <- data.frame(x3 = sample(seq(-2, 2, by = 0.1), 20, replace = TRUE), > y3 = runif(20, min=-8, max=4), > g3 = rep(1:4, each = 5)) %>% group_by(g3) %>% > arrange(x3) > > gplot <- ggplot(dummy) ### I know this line is not necessary in this > particular example, please assume this is relevantin the actual framework I > am trying to build > gplot <- gplot + > geom_smooth(data = data2, > aes(x2, y2, group = g2, color = factor(g2), linetype > factor(g2), size = 0.5*g2), > method = 'loess') + > geom_path(data = data3, > aes(x3, y3, group = g3, color = factor(g3), linetype > factor(g3), shape = factor(g3), size = 0.5*g3)) + > geom_point(data = data, > aes(x1, y1, group = g1, color = factor(g1), fill = factor(g1), > shape = factor(g1), size = g1)) > gplot > > 2- Is the situation easier or more complex (ie, does ggplot make some > decisions/assumptions for the user?) if the same x, y, and group variables > are used in different geom's but the user still wants to provide > independently graphical settings for each geom? > > Thank you > > Sebastien > > ______________________________________________ > R-help at r-project.org 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.
sbihorel
2015-Oct-29 18:27 UTC
[R] Achieve independent fine user control of ggplot geom settings when using groups in multiple geom's
Thank you for your reply. I do not have anything specific data/geom/grouping in mind, rather a framework in which users would just pile of each other layer after layer of geom each defined with specific settings. A minimum realistic scenario would a geom_point followed by a geom_smooth or a geom_path using different colors... Sebastien On 10/29/2015 1:34 PM, Ista Zahn wrote:> I would say in a word, 'no'. What you seem to be implying is that you > want multiple color scales, multiple shape scales, etc. As far as I > know there is no support for that in ggplot2. > > Perhaps if you show us what you're actually trying to accomplish > someone can suggest a solution or at least a work-around. > > Best, > Ista > > On Thu, Oct 29, 2015 at 12:26 PM, sbihorel > <Sebastien.Bihorel at cognigencorp.com> wrote: >> Hello, >> >> Before I get to my question, I want to make clear that the topic of my >> present post is similar to posts I recently submitted to the list. Although >> I appreciate the replies I got, I believe that I did not correctly frame >> these previous posts to get to the bottom of things. >> I also want to make clear that the code example that I have inserted in this >> post is meant to illustrate my points/questions and does not reflect a >> particular interest in the data or the sequence of ggplot geom's used >> (except otherwise mentioned). Actually, I purposefully used junk meaningless >> data, geom's sequence, and settings, so that we agree the plot is ugly and >> that we, hopefully, don't get hang on specifics and start discussing about >> the merit of one approach vs another. >> >> So here are my questions: >> >> 1- Can a user independently control the settings of each geom's used in a >> ggplot call sequence when grouping is required? >> >> By control, I mean: user defines the graphical settings (groups, symbol >> shapes, colors, fill colors, line types, size scales, and alpha) and does >> not let ggplot choose these settings from some theme default. >> By independently, I mean: the set of graphical settings can be totally >> different from one group to the next and from one geom to the next. >> >> If this fine control can be achieved, how would you go about it (please, be >> assured that I already spent hours miserably failing to get to anything >> remotely productive, so your help would be really appreciated)? >> >> library(dplyr) >> library(tidyr) >> library(ggplot2) >> set.seed(1234) >> dummy <- data.frame(dummy = numeric()) >> data <- data.frame(x1 = rep(-2:2, each = 80) + rnorm(4000, sd = 0.1), >> g1 = rep(1:4, each = 1000)) >> data <- data %>% mutate(y1 = -x1^2 + 2*x1 - 2 + g1 + rnorm(4000, sd = 0.25)) >> data2 <- data %>% select(x2=x1, y2=y1, g2=g1) %>% mutate(x2=-x2) >> data3 <- data.frame(x3 = sample(seq(-2, 2, by = 0.1), 20, replace = TRUE), >> y3 = runif(20, min=-8, max=4), >> g3 = rep(1:4, each = 5)) %>% group_by(g3) %>% >> arrange(x3) >> >> gplot <- ggplot(dummy) ### I know this line is not necessary in this >> particular example, please assume this is relevantin the actual framework I >> am trying to build >> gplot <- gplot + >> geom_smooth(data = data2, >> aes(x2, y2, group = g2, color = factor(g2), linetype >> factor(g2), size = 0.5*g2), >> method = 'loess') + >> geom_path(data = data3, >> aes(x3, y3, group = g3, color = factor(g3), linetype >> factor(g3), shape = factor(g3), size = 0.5*g3)) + >> geom_point(data = data, >> aes(x1, y1, group = g1, color = factor(g1), fill = factor(g1), >> shape = factor(g1), size = g1)) >> gplot >> >> 2- Is the situation easier or more complex (ie, does ggplot make some >> decisions/assumptions for the user?) if the same x, y, and group variables >> are used in different geom's but the user still wants to provide >> independently graphical settings for each geom? >> >> Thank you >> >> Sebastien >> >> ______________________________________________ >> R-help at r-project.org 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.