Add text to geom_line in ggplot

后端 未结 2 829
野性不改
野性不改 2020-12-30 04:17

I am trying to create a line plot for 2 stocks AAPL and FB. Instead of adding a separate legend, I would like to print the stock symbols al

2条回答
  •  悲哀的现实
    2020-12-30 04:29

    This is the sort of plot that is perfect for the directlabels package. And it is easier to plot if the data is available in one dataframe.

    # Data
    library(quantmod)
    getSymbols('AAPL')
    getSymbols('FB')
    AAPL = data.frame(AAPL)
    FB = data.frame(FB)
    
    # rbind into one dataframe
    AAPL$label = "AAPL"
    FB$label = "FB"
    names = gsub("^FB\\.(.*$)", "\\1", names(FB))
    names(AAPL) = names
    names(FB) = names
    df = rbind(AAPL, FB)
    
    
    # Packages
    library(ggplot2)
    library(directlabels)
    
    # The plot - labels at the beginning and the ends of the lines.
    ggplot(df, aes(as.Date(rownames(df)), Adjusted, group = label, colour = label)) +
      geom_line()  +
      scale_colour_discrete(guide = 'none')  +    
      geom_dl(aes(label = label), method = list(dl.combine("first.points", "last.points"))) 
    

    A better plot: Increase the space between the end points of the lines and the labels. See here for other options.

    ggplot(df, aes(as.Date(rownames(df)), Adjusted, group = label, colour = label)) +
       geom_line()  +
       scale_colour_discrete(guide = 'none')  +    
       scale_x_date(expand=c(0.1, 0)) +
       geom_dl(aes(label = label), method = list(dl.trans(x = x + .2), "last.points")) +
       geom_dl(aes(label = label), method = list(dl.trans(x = x - .2), "first.points")) 
    


    Question is possibly a duplicate of this one.

提交回复
热议问题