[R] Add sum line to plot of multiple x values

Loris Bennett loris.bennett at fu-berlin.de
Tue Mar 10 13:42:30 CET 2015


Loris Bennett <loris.bennett at fu-berlin.de> writes:

> Hi Petr,
>
> See inline.
>
> PIKAL Petr <petr.pikal at precheza.cz> writes:
>
>> Hi
>>
>> see inline
>>
>>> -----Original Message-----
>>> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of Loris
>>> Bennett
>>> Sent: Monday, March 09, 2015 4:35 PM
>>> To: r-help at stat.math.ethz.ch
>>> Subject: Re: [R] Add sum line to plot of multiple x values
>>>
>>> PIKAL Petr <petr.pikal at precheza.cz> writes:
>>>
>>> > Hi
>>> >
>>> > Not extremely clear what do you want to plot. Do you want to add a
>>> > line which marks total number of files each day regardless of user?
>>> Or
>>> > a total number of files regardless of date coloured by user?
>>>
>>> Sorry, I was unclear.  I meant that I would like to plot the following:
>>>
>>> 1. For each user: the number of files for each date (my code does this)
>>> 2. The sum of files of all users for each date (this is what I still
>>>    need)
>>>
>>> > In each case you shall search functions geom_hline or geom_abline
>>> >
>>> > http://stackoverflow.com/questions/13254441/add-a-horizontal-line-to-
>>> plot-and-legend-in-ggplot2
>>>
>>> So I don't want a straight line
>>
>> but in your code is
>>
>>>> geom_line(data=d,aes(x=date,y=sum(files),group=date),colour='black')
>>
>> so you apparently want some sort of line.
>
> Yes, but see below.
>
>> anyway, if I do
>>
>> d.ag<-aggregate(d$files, list(d$date), sum)
>>
>> I can add
>>
>> p+geom_point(data=d.ag,aes(x=Group.1,y=x), size=5)
>>
>> and I get summary points.
>
> Thanks, this works.
>
>> If you want lines you can do
>>
>> p+geom_hline(data=d.ag,aes(yintercept=x, colour=Group.1))
>>
>> or you can fiddle with geom_segment
>
> I don't want an hline, just a line joining the dots I get using
> geom_point.  I thought something like
>
>   p + geom_line(data=d.ag,aes(x=as.character(Group.1),y=x)
>
> would work.  However, while I get a plot with axes labelled in the
> correct ranges, no line is plotted.  Explicitly setting the colour with
>
>   p + geom_line(data=d.ag,aes(x=as.character(Group.1),y=x),colour="red")
>
> doesn't help.  What am I doing wrong?

I found the answer by googling "geom_line doesn’t draw lines".  The
following does what I want:

  ggplot(data=d.ag,aes(x=as.character(Group.1),y=x,group=1)) +_geom_line()

My understanding is that, because 'Group.1' is a factor, the 'x' values
are not considered as belonging to the same group and geom_line only
connects points within a group.

>>> > ggplot is rather complicated but very flexible
>>>
>>> I don't mind ggplot being complicated, but I find the documentation a
>>> little impenetrable.
>>
>> You can find plenty of help when you just try to google on the item
>> searching. Actually this is what I do when the solution is not obvious
>> or requires some hidden instruction.
>
> This is what I normally resort to with varying degrees of success.  It
> just seems a bit of a shame the some of the documentation for such a
> good piece of software does indeed appear to be rather "hidden".
>
>> Cheers
>> Petr
>>
>>>
>>> Cheers,
>>>
>>> Loris
>>>
>>>
>>> >> -----Original Message-----
>>> >> From: R-help [mailto:r-help-bounces at r-project.org] On Behalf Of
>>> Loris
>>> >> Bennett
>>> >> Sent: Monday, March 09, 2015 2:56 PM
>>> >> To: r-help at stat.math.ethz.ch
>>> >> Subject: [R] Add sum line to plot of multiple x values
>>> >>
>>> >> Hi,
>>> >>
>>> >> Here are my data:
>>> >>
>>> >> > d
>>> >>    user files       date
>>> >> 1 alice    18 2013-09-15
>>> >> 2   bob     5 2013-09-15
>>> >> 3 carol    21 2013-09-15
>>> >> 4 alice    22 2013-09-08
>>> >> 5   bob     9 2013-09-08
>>> >> 6 carol    14 2013-09-08
>>> >> 7 alice    26 2013-09-01
>>> >> 8   bob     3 2013-09-01
>>> >> 9 carol    22 2013-09-01
>>> >>
>>> >> I would like to plot the number of files against date for all users,
>>> so
>>> >> I have:
>>> >>
>>> >>   library(ggplot2)
>>> >>
>>> >>   people <- c("alice","bob","carol")
>>> >>   user <- c(rep(people,3))
>>> >>   files <- c(18,5,21,22,9,14,26,3,22)
>>> >>   date <- c(rep("2013-09-15",3),rep("2013-09-08",3),rep("2013-09-
>>> >> 01",3))
>>> >>   d <- data.frame(user=user,files=files,date=date)
>>> >>
>>> >>   p <- ggplot()
>>> >>   p <- p +
>>> geom_line(data=d,aes(x=date,y=files,group=user,colour=user))
>>> >>
>>> >> I would now like to add a line to show the total number of files as
>>> a
>>> >> function of date.  I tried
>>> >>
>>> >>   p <- p +
>>> >> geom_line(data=d,aes(x=date,y=sum(files),group=date),colour='black')
>>> >>
>>> >> I don't get a black line, but the plot is scaled such that I can see
>>> >> that sum(file) for all values of 'file', rather than those for each
>>> >> date, is being used.
>>> >>
>>> >> I would like to know how to do this correctly, but I would rather be
>>> >> able to work it out for myself.  However, if I decide, say, that I
>>> >> don't
>>> >> know exactly what the 'group' argument does, how do I find it out?
>>> >>
>>> >> ?geom_line doesn't have it, although the examples there use it.
>>> ?ggplot
>>> >> doesn't mention it. ?group gives me stuff about formatting text
>>> >> arguments. ??group only leads me to ?ggplot2::add_group, which also
>>> >> does
>>> >> not seem to help.
>>> >>
>>> >> Am I at fault for trying to learn R in an ad hoc manner, to which
>>> the
>>> >> documentation of R does not lend itself, or am I missing something?
>>> >>
>>> >> Cheers,
>>> >>
>>> >> Loris
>>> >>
>>> >> --
>>> >> This signature is currently under construction.
>>> >>

-- 
Dr. Loris Bennett (Mr.)
ZEDAT, Freie Universität Berlin         Email loris.bennett at fu-berlin.de



More information about the R-help mailing list