[R] a very particular plot

Ista Zahn izahn at psych.rochester.edu
Wed Jul 14 19:02:11 CEST 2010


Hi all,
Maybe I missed some crucial context (I did not follow the example all
the way through). But of course ggplot will make legends based on
integers. For example:

dat <- data.frame(x=sample(1:10, 100, replace=TRUE),
                  y=sample(1:10, 100, replace=TRUE),
                  z=sample(1:10,100, replace=TRUE)
                  )

str(dat)

ggplot(dat, aes(x=x, y=y, color=z)) + geom_point()

-Ish

On Wed, Jul 14, 2010 at 10:45 AM, Jeff Newmiller
<jdnewmil at dcn.davis.ca.us> wrote:
> Ggplot will only produce legends based on factors. Integers are not factors.
>
> "Ian Bentley" <ian.bentley at gmail.com> wrote:
>
>>Hi Dennis,
>>
>>Thanks for the quick reply.
>>Once I removed solid = TRUE, which was giving errors, the code is accepted
>>fine.
>>
>>It's strange though, no legend appears.  Even when I try something simple
>>like:
>>p + scale_shape_manual(values=1:3)
>>
>>No legend appears.  I can't find any similar problems on google.
>>
>>Thanks again,
>>Ian
>>
>>
>>On 14 July 2010 03:56, Dennis Murphy <djmuser at gmail.com> wrote:
>>
>>> Hi:
>>>
>>> This is untested, so caveat emptor. I believe Hadley is busy teaching a
>>> ggplot2 course this week so his availability is limited at best. I guess I
>>> can give it a shot...
>>>
>>> You need a scale_shape_* construct to add to your plot, perhaps something
>>> like
>>>
>>> scale_shape_manual('Statistic', breaks = 1:3, labels = c('Min', 'Median',
>>> 'Max'), solid = TRUE)
>>>
>>> The 'Statistic' puts a title on the legend, the breaks argument should
>>> supply the values of the shapes,
>>> the labels argument should provide the label to associate to each shape,
>>> and solid = TRUE should
>>> produce the same behavior as in the geom_point() calls wrt shapes. [Notice
>>> how I say 'should'...]
>>>
>>> No guarantees this will work - scales are one of my greatest frustrations
>>> in ggplot2. Expect this to be the first of several iterations you'll have to
>>> go through to get it to work the way you want.
>>>
>>> HTH,
>>> Dennis
>>>
>>>
>>> On Tue, Jul 13, 2010 at 4:32 PM, Ian Bentley <ian.bentley at gmail.com>wrote:
>>>
>>>> I've got a couple of more changes that I want to make to my plot, and I
>>>> can't figure things out.  Thanks for all the help.
>>>>
>>>> I'm using this R script
>>>>
>>>> library(ggplot2)
>>>> library(lattice)
>>>> # Generate 50 data sets of size 100 and assign them to a list object
>>>>
>>>> low <- 1
>>>> n <- 50
>>>> #Load data from file
>>>> for(i in low:n) assign(paste('df', i, sep = ''),
>>>>         read.table(paste("tot-LinkedList",i*100,"query.log",sep=''),
>>>> header=TRUE))
>>>>
>>>>
>>>> dnames <- paste('df', low:n, sep = '')
>>>> l <- vector('list', n)
>>>> for(i in seq_along(dnames)) l[[i]] <- with(get(dnames[i]), Send + Receive)
>>>> ml <- melt(l)
>>>>
>>>> dsum <- ddply(ml, 'L1', summarise, mins = min(value), meds =
>>>> median(value),
>>>>               maxs = max(value))
>>>>
>>>>
>>>> p <- ggplot(ml, aes(x = L1*100, y = value)) +
>>>>     geom_point(alpha = 0.2) +
>>>>     geom_point(data = dsum, aes(y = mins), shape = 1, size = 3,
>>>> solid=TRUE, colour='blue') +
>>>>     geom_point(data = dsum, aes(y = meds), shape = 2, size = 3,
>>>> solid=TRUE, colour='blue') +
>>>>     geom_point(data = dsum, aes(y = maxs), shape = 3, size = 3,
>>>> solid=TRUE, colour='blue') +
>>>>     geom_smooth(data = dsum, aes(y = mins)) +
>>>>     geom_smooth(data = dsum, aes(y = meds)) +
>>>>     geom_smooth(data = dsum, aes(y = maxs)) +
>>>>     opts(axis.text.x = theme_text(size = 7, angle = 90, hjust = 1), title
>>>> = 'Linked List Query Costs Increasing Network Size')  +
>>>>     xlab('Network Complexity (nodes)') + ylab('Battery Cost (uJ)') +
>>>>
>>>> --END--
>>>>
>>>> And this works great, except that I think that I am not being very R'y,
>>>> since now I want to add a legend saying that circle (i.e. shape 1) is the
>>>> minimum, and shape 2 is the med, and shape 3 is max.
>>>>
>>>> I'd also like to be able to move the legend to the top left part of the
>>>> plot since that area is empty anyways.
>>>>
>>>> Is there any way that I can do it easily?
>>>>
>>>> Thanks
>>>> Ian
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 11 July 2010 10:29, Ian Bentley <ian.bentley at gmail.com> wrote:
>>>>
>>>>> Thanks to both of you!
>>>>>
>>>>>
>>>>> I was able to get exactly the plot I was looking for!
>>>>>
>>>>> Ian
>>>>>
>>>>> On 11 July 2010 09:30, Hadley Wickham <hadley at rice.edu> wrote:
>>>>>
>>>>>> Hi Ian,
>>>>>>
>>>>>> Have a look at the examples in http://had.co.nz/ggplot2/geom_tile.html
>>>>>> for some ideas on how to do this with ggplot2.
>>>>>>
>>>>>> Hadley
>>>>>>
>>>>>> On Sat, Jul 10, 2010 at 8:10 PM, Ian Bentley <ian.bentley at gmail.com>
>>>>>> wrote:
>>>>>> > Hi all,
>>>>>> >
>>>>>> > Thanks for the really great help I've received on this board in the
>>>>>> past.
>>>>>> >
>>>>>> > I have a very particular graph that I'm trying to plot, and I'm not
>>>>>> really
>>>>>> > sure how to do it.  I think I should be able to use ggplot for this,
>>>>>> but I'm
>>>>>> > not really sure how.
>>>>>> >
>>>>>> > I have a data.frame which contains fifty sub frames containing one
>>>>>> hundred
>>>>>> > data points each.
>>>>>> >
>>>>>> > I can do a histogram of each of these sub frames individually, and see
>>>>>> the
>>>>>> > distribution.  I can also plot the mean & standard deviation of the
>>>>>> fifty
>>>>>> > together in one plot, where the x axis identifies the subframe to
>>>>>> which it
>>>>>> > refers.
>>>>>> >
>>>>>> > What I'd like to do is combine these two things, so that I have a 2 -d
>>>>>> > graph.
>>>>>> >
>>>>>> > The x axis specifies the sub-frame.
>>>>>> > The y axis is just the data.
>>>>>> >
>>>>>> > Each x column plots the minimum of the data in the sub frame, the
>>>>>> maximum,
>>>>>> > and the median, as points.  AND each x column also displays histogram
>>>>>> data,
>>>>>> > so that the y values which have more density in the subframe are
>>>>>> darker, and
>>>>>> > the ones with less density are lighter.
>>>>>> >
>>>>>> > I know this is fairly particular, and may not be possible, but it
>>>>>> would be
>>>>>> > really great for me!
>>>>>> >
>>>>>> > If anyone can help - thanks!
>>>>>> >
>>>>>> > --
>>>>>> > Ian Bentley
>>>>>> > M.Sc. Candidate
>>>>>> > Queen's University
>>>>>> > Kingston, Ontario
>>>>>> >
>>>>>> >        [[alternative HTML version deleted]]
>>>>>> >
>>>>>> > ______________________________________________
>>>>>> > R-help at r-project.org mailing list
>>>>>> > 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.
>>>>>> >
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Assistant Professor / Dobelman Family Junior Chair
>>>>>> Department of Statistics / Rice University
>>>>>> http://had.co.nz/
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Ian Bentley
>>>>> M.Sc. Candidate
>>>>> Queen's University
>>>>> Kingston, Ontario
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Ian Bentley
>>>> M.Sc. Candidate
>>>> Queen's University
>>>> Kingston, Ontario
>>>>
>>>
>>>
>>
>>
>>--
>>Ian Bentley
>>M.Sc. Candidate
>>Queen's University
>>Kingston, Ontario
>>
>>       [[alternative HTML version deleted]]
>>
>>______________________________________________
>>R-help at r-project.org mailing list
>>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.
>
> ---------------------------------------------------------------------------
> 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.
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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.
>



-- 
Ista Zahn
Graduate student
University of Rochester
Department of Clinical and Social Psychology
http://yourpsyche.org



More information about the R-help mailing list