Referencing a vector of data labels in ggplot function

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Referencing a vector of data labels in ggplot function

Ben Hunter
Hi,

I really feel I've looked everywhere, although I know this can't be a hard
problem. I'd like to be able to call the graph below as a function, but I
can't get the function to recognize variables beyond 'dframe'. I've read
through many papers on writing functions in R, but I can't get this to work.

data <- data.frame('date' = as.Date(rep(c(15101,
            15108, 15115, 15122, 15129, 15136, 15143, 15150),4),
            origin = '1899-12-30'),
            'factor' = factor(rep(c('first','second'), each = 8, 2)),
            'value' = rep(c(429258, 430645, 431165, 431360, 452284, 467316,
467326, 467330,
            375588, 411383, 427179, 364582, 351494, 359034, 374047,
            339628),2),
            'Facet' = rep(c('bottom','top'), each = 16))

pTitle <- 'Main Title'
plines <- c('Line 1', 'Line 2','Line 3', 'Line 4')
col1 <- c('#ec421e', '#f7bd2e','#ec421e', '#f7bd2e')

#If I use the line below and explicitly place plines, pTitle and col1 in the
appropriate places
#it will work fine. I want to use the line as written without the hashmark.
#simple <- function(dframe){

withNames <- function(dframe, lineNames, plotName, colors){
    p <- ggplot(dframe, aes(date, value, group = factor, color = factor))
    p2 <- p + geom_line(size = 1)
#   + opts(title = plotName)
    p2 <- p2 + facet_grid(Facet~., scales = 'free') +
#    p2 <- p2 + geom_text(data = dframe[dframe[,'date'] == '1941-06-16',],
#          aes(date, value, label = lineNames, vjust = 1)) +
          scale_colour_manual(values = colors)
}

finalP <- withNames(data, plines, pTitle, col1)

#finalP <- simple(data)

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Referencing a vector of data labels in ggplot function

Hadley Wickham-2
Maybe something like this?

withNames <- function(dframe, lineNames, plotName, colors){
  one_day <- subset(dframe, data == '1941-06-16')
  one_day$lineNames <- lineNames

  ggplot(dframe, aes(date, value, group = factor, color = factor)) +
    geom_line(size = 1) +
    facet_grid(Facet~., scales = 'free') +
    geom_text(aes(label = lineNames), data = one_day, vjust = 1) +
    scale_colour_manual(values = colors) +
    opts(title = plotName)
}

withNames(data, plines, pTitle, col1)

It's not at all clear how you expect the line names to be matched up
to the lines though.

Hadley

On Fri, Jul 8, 2011 at 3:39 PM, Ben Hunter <[hidden email]> wrote:

> Hi,
>
> I really feel I've looked everywhere, although I know this can't be a hard
> problem. I'd like to be able to call the graph below as a function, but I
> can't get the function to recognize variables beyond 'dframe'. I've read
> through many papers on writing functions in R, but I can't get this to work.
>
> data <- data.frame('date' = as.Date(rep(c(15101,
>            15108, 15115, 15122, 15129, 15136, 15143, 15150),4),
>            origin = '1899-12-30'),
>            'factor' = factor(rep(c('first','second'), each = 8, 2)),
>            'value' = rep(c(429258, 430645, 431165, 431360, 452284, 467316,
> 467326, 467330,
>            375588, 411383, 427179, 364582, 351494, 359034, 374047,
>            339628),2),
>            'Facet' = rep(c('bottom','top'), each = 16))
>
> pTitle <- 'Main Title'
> plines <- c('Line 1', 'Line 2','Line 3', 'Line 4')
> col1 <- c('#ec421e', '#f7bd2e','#ec421e', '#f7bd2e')
>
> #If I use the line below and explicitly place plines, pTitle and col1 in the
> appropriate places
> #it will work fine. I want to use the line as written without the hashmark.
> #simple <- function(dframe){
>
> withNames <- function(dframe, lineNames, plotName, colors){
>    p <- ggplot(dframe, aes(date, value, group = factor, color = factor))
>    p2 <- p + geom_line(size = 1)
> #   + opts(title = plotName)
>    p2 <- p2 + facet_grid(Facet~., scales = 'free') +
> #    p2 <- p2 + geom_text(data = dframe[dframe[,'date'] == '1941-06-16',],
> #          aes(date, value, label = lineNames, vjust = 1)) +
>          scale_colour_manual(values = colors)
> }
>
> finalP <- withNames(data, plines, pTitle, col1)
>
> #finalP <- simple(data)
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] 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/

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: Referencing a vector of data labels in ggplot function

Ben Hunter
That did it. I just wanted the line names to be placed at the second to last
date tick mark. Later I'll write something that adjusts the labels if there
isn't room or if there is overlap.

Thanks!

On Sat, Jul 9, 2011 at 7:38 AM, Hadley Wickham <[hidden email]> wrote:

> Maybe something like this?
>
> withNames <- function(dframe, lineNames, plotName, colors){
>   one_day <- subset(dframe, data == '1941-06-16')
>  one_day$lineNames <- lineNames
>
>  ggplot(dframe, aes(date, value, group = factor, color = factor)) +
>    geom_line(size = 1) +
>     facet_grid(Facet~., scales = 'free') +
>     geom_text(aes(label = lineNames), data = one_day, vjust = 1) +
>    scale_colour_manual(values = colors) +
>    opts(title = plotName)
> }
>
> withNames(data, plines, pTitle, col1)
>
> It's not at all clear how you expect the line names to be matched up
> to the lines though.
>
> Hadley
>
> On Fri, Jul 8, 2011 at 3:39 PM, Ben Hunter <[hidden email]> wrote:
> > Hi,
> >
> > I really feel I've looked everywhere, although I know this can't be a
> hard
> > problem. I'd like to be able to call the graph below as a function, but I
> > can't get the function to recognize variables beyond 'dframe'. I've read
> > through many papers on writing functions in R, but I can't get this to
> work.
> >
> > data <- data.frame('date' = as.Date(rep(c(15101,
> >            15108, 15115, 15122, 15129, 15136, 15143, 15150),4),
> >            origin = '1899-12-30'),
> >            'factor' = factor(rep(c('first','second'), each = 8, 2)),
> >            'value' = rep(c(429258, 430645, 431165, 431360, 452284,
> 467316,
> > 467326, 467330,
> >            375588, 411383, 427179, 364582, 351494, 359034, 374047,
> >            339628),2),
> >            'Facet' = rep(c('bottom','top'), each = 16))
> >
> > pTitle <- 'Main Title'
> > plines <- c('Line 1', 'Line 2','Line 3', 'Line 4')
> > col1 <- c('#ec421e', '#f7bd2e','#ec421e', '#f7bd2e')
> >
> > #If I use the line below and explicitly place plines, pTitle and col1 in
> the
> > appropriate places
> > #it will work fine. I want to use the line as written without the
> hashmark.
> > #simple <- function(dframe){
> >
> > withNames <- function(dframe, lineNames, plotName, colors){
> >    p <- ggplot(dframe, aes(date, value, group = factor, color = factor))
> >    p2 <- p + geom_line(size = 1)
> > #   + opts(title = plotName)
> >    p2 <- p2 + facet_grid(Facet~., scales = 'free') +
> > #    p2 <- p2 + geom_text(data = dframe[dframe[,'date'] ==
> '1941-06-16',],
> > #          aes(date, value, label = lineNames, vjust = 1)) +
> >          scale_colour_manual(values = colors)
> > }
> >
> > finalP <- withNames(data, plines, pTitle, col1)
> >
> > #finalP <- simple(data)
> >
> >        [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > [hidden email] 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/
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.