[R] Achieve independent fine user control of ggplot geom settings when using groups in multiple geom's

sbihorel Sebastien.Bihorel at cognigencorp.com
Fri Oct 30 13:50:00 CET 2015


Thanks Hadley,

I will certainly read your book. Unfortunately, what you just confirmed 
as the developer of ggplot means that ggplot is non-starter for what I 
want to build. Too bad, I was starting to appreciate some of its 
advantages over lattice.

About your book, in case I do not find a proper box on which to build it 
from source, I was wondering when it would become available in hard copy.

Sebastien

On 10/30/2015 07:34, Hadley Wickham wrote:
> I'd recommend reading the ggplot2 book - learning more about how
> scales work in ggplot2 will help you understand why this isn't
> possible.
> Hadley
>
> On Thu, Oct 29, 2015 at 6:31 PM, sbihorel
> <Sebastien.Bihorel at cognigencorp.com> wrote:
>> Thank for your reply,
>>
>> I may accept your point about the mapping consistency when the different
>> geom's use the same data source. However, as pointed out in my example code,
>> this does not have to be the case. Hence my question about the geom-specific
>> control of group-dependent graphical settings.
>>
>> Sebastien
>>
>>
>> On 10/29/2015 4:49 PM, Jeff Newmiller wrote:
>>> I think a fundamental design principle of ggplot is that mapping of values
>>> to visual representation are consistent within a single plot, so reassigning
>>> color mapping for different elements would not be supported.
>>>
>>> That being said, it is possible to explicitly control specific attributes
>>> within a single geom outside of the mapping, though this usually does break
>>> mappings in the legend.
>>>
>>> ---------------------------------------------------------------------------
>>> Jeff Newmiller                        The     .....       .....  Go
>>> Live...
>>> DCN:<jdnewmil at dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live
>>> Go...
>>>                                         Live:   OO#.. Dead: OO#..  Playing
>>> Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
>>> /Software/Embedded Controllers)               .OO#.       .OO#.
>>> rocks...1k
>>>
>>> ---------------------------------------------------------------------------
>>> Sent from my phone. Please excuse my brevity.
>>>
>>> On October 29, 2015 11:27:55 AM MST, sbihorel
>>> <Sebastien.Bihorel at cognigencorp.com> wrote:
>>>> 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.
>>>> ______________________________________________
>>>> 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.
>>
>> --
>> Sebastien Bihorel
>> Cognigen Corporation
>> (t) +1 716 633 3463 ext 323
>> Cognigen Corporation, a wholly owned subsidiary of Simulations Plus, Inc.
>>
>> ______________________________________________
>> 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.
>
>

-- 
Sebastien Bihorel
Cognigen Corporation
(t) +1 716 633 3463 ext 323
Cognigen Corporation, a wholly owned subsidiary of Simulations Plus, Inc.



More information about the R-help mailing list