【问题标题】:ggplot2: Size and placement of geom_lineggplot2:geom_line 的大小和位置
【发布时间】:2012-09-06 18:44:59
【问题描述】:

这是我要修改的绘图的数据:

mdfr <- read.table(textConnection("
 name stadio   variable      value rating
541B      1 start_date 22/02/2011      5
541B      2 start_date 24/05/2011      5
541B      3 start_date 01/06/2011      5
541B      4 start_date 20/09/2011      5
579B      1 start_date 07/06/2011      5
579B      2 start_date 08/02/2012      5
579B      3 start_date 09/02/2012      5
579B      4 start_date 24/04/2012      5
635B      1 start_date 03/05/2012      5
635B      2 start_date 29/06/2012      5
635B      3 start_date 05/07/2012      5
635B      4 start_date 11/09/2012      5
700B      1 start_date 29/02/2012      5
700B      2 start_date 29/02/2012      5
700B      3 start_date 29/02/2012      5
700B      4 start_date 08/05/2012      5
558B      1 start_date 30/05/2011      5
558B      2 start_date 17/10/2011      5
558B      3 start_date 27/01/2012      5
558B      4 start_date 06/04/2012      5
725B      1 start_date 28/12/2011      5
725B      2 start_date 23/02/2012      5
725B      3 start_date 02/03/2012      5
725B      4 start_date 31/05/2012      5
727B      1 start_date 23/12/2011      5
727B      2 start_date 03/02/2012      5
727B      3 start_date 16/02/2012      5
727B      4 start_date 18/05/2012      5
733B      1 start_date 30/12/2011      5
733B      2 start_date 23/02/2012      5
733B      3 start_date 02/03/2012      5
733B      4 start_date 07/06/2012      5
734B      1 start_date 16/03/2012      5
734B      2 start_date 16/03/2012      5
734B      3 start_date 16/03/2012      5
734B      4 start_date 25/04/2012      5
719B      1 start_date 29/06/2012      5
719B      2 start_date 10/07/2012      5
719B      3 start_date 19/07/2012      5
719B      4 start_date 16/10/2012      5
737B      1 start_date 22/06/2012      5
737B      2 start_date 25/07/2012      5
737B      3 start_date 01/08/2012      5
737B      4 start_date 23/10/2012      5
541A      1 start_date 22/02/2011      3
541A      2 start_date 24/05/2011      3
541A      3 start_date 01/06/2011      3
541A      4 start_date 20/09/2011      3
579A      1 start_date 07/06/2011      3
579A      2 start_date 08/02/2012      3
579A      3 start_date 09/02/2012      3
579A      4 start_date 08/05/2012      3
635A      1 start_date 03/05/2012      3
635A      2 start_date 31/07/2012      3
635A      3 start_date 31/07/2012      3
635A      4 start_date 23/10/2012      3
700A      1 start_date 22/03/2012      3
700A      2 start_date 22/03/2012      3
700A      3 start_date 22/03/2012      3
700A      4 start_date 12/06/2012      3
558A      1 start_date 30/05/2011      3
558A      2 start_date 17/10/2011      3
558A      3 start_date 27/01/2012      3
558A      4 start_date 06/04/2012      3
725A      1 start_date 28/12/2011      3
725A      2 start_date 23/02/2012      3
725A      3 start_date 02/03/2012      3
725A      4 start_date 31/05/2012      3
727A      1 start_date 23/12/2011      3
727A      2 start_date 03/02/2012      3
727A      3 start_date 16/02/2012      3
727A      4 start_date 18/05/2012      3
733A      1 start_date 30/12/2011      3
733A      2 start_date 23/02/2012      3
733A      3 start_date 02/03/2012      3
733A      4 start_date 07/06/2012      3
734A      1 start_date 16/03/2012      3
734A      2 start_date 16/03/2012      3
734A      3 start_date 16/03/2012      3
734A      4 start_date 25/04/2012      3
719A      1 start_date 10/07/2012      3
719A      2 start_date 17/07/2012      3
719A      3 start_date 26/07/2012      3
719A      4 start_date 09/10/2012      3
737A      1 start_date 01/07/2012      3
737A      2 start_date 06/07/2012      3
737A      3 start_date 26/07/2012      3
737A      4 start_date 16/10/2012      3
541B      1   end_date 24/05/2011      5
541B      2   end_date 01/06/2011      5
541B      3   end_date 20/09/2011      5
541B      4   end_date 28/09/2012      5
579B      1   end_date 08/02/2012      5
579B      2   end_date 09/02/2012      5
579B      3   end_date 24/04/2012      5
579B      4   end_date 29/10/2012      5
635B      1   end_date 29/06/2012      5
635B      2   end_date 05/07/2012      5
635B      3   end_date 11/09/2012      5
635B      4   end_date 04/02/2013      5
700B      1   end_date 29/02/2012      5
700B      2   end_date 29/02/2012      5
700B      3   end_date 08/05/2012      5
700B      4   end_date 12/11/2012      5
558B      1   end_date 17/10/2011      5
558B      2   end_date 27/01/2012      5
558B      3   end_date 06/04/2012      5
558B      4   end_date 09/09/2012      5
725B      1   end_date 23/02/2012      5
725B      2   end_date 02/03/2012      5
725B      3   end_date 31/05/2012      5
725B      4   end_date 30/11/2012      5
727B      1   end_date 03/02/2012      5
727B      2   end_date 16/02/2012      5
727B      3   end_date 18/05/2012      5
727B      4   end_date 19/11/2012      5
733B      1   end_date 23/02/2012      5
733B      2   end_date 02/03/2012      5
733B      3   end_date 07/06/2012      5
733B      4   end_date 30/11/2012      5
734B      1   end_date 16/03/2012      5
734B      2   end_date 16/03/2012      5
734B      3   end_date 25/04/2012      5
734B      4   end_date 04/07/2012      5
719B      1   end_date 10/07/2012      5
719B      2   end_date 19/07/2012      5
719B      3   end_date 16/10/2012      5
719B      4   end_date 28/02/2013      5
737B      1   end_date 25/07/2012      5
737B      2   end_date 01/08/2012      5
737B      3   end_date 23/10/2012      5
737B      4   end_date 28/02/2013      5
541A      1   end_date 24/05/2011      3
541A      2   end_date 01/06/2011      3
541A      3   end_date 20/09/2011      3
541A      4   end_date 17/01/2013      3
579A      1   end_date 08/02/2012      3
579A      2   end_date 09/02/2012      3
579A      3   end_date 08/05/2012      3
579A      4   end_date 19/12/2012      3
635A      1   end_date 31/07/2012      3
635A      2   end_date 31/07/2012      3
635A      3   end_date 23/10/2012      3
635A      4   end_date 22/03/2013      3
700A      1   end_date 22/03/2012      3
700A      2   end_date 22/03/2012      3
700A      3   end_date 12/06/2012      3
700A      4   end_date 18/12/2012      3
558A      1   end_date 17/10/2011      3
558A      2   end_date 27/01/2012      3
558A      3   end_date 06/04/2012      3
558A      4   end_date 10/01/2013      3
725A      1   end_date 23/02/2012      3
725A      2   end_date 02/03/2012      3
725A      3   end_date 31/05/2012      3
725A      4   end_date 30/11/2012      3
727A      1   end_date 03/02/2012      3
727A      2   end_date 16/02/2012      3
727A      3   end_date 18/05/2012      3
727A      4   end_date 19/11/2012      3
733A      1   end_date 23/02/2012      3
733A      2   end_date 02/03/2012      3
733A      3   end_date 07/06/2012      3
733A      4   end_date 30/11/2012      3
734A      1   end_date 16/03/2012      3
734A      2   end_date 16/03/2012      3
734A      3   end_date 25/04/2012      3
734A      4   end_date 20/09/2012      3
719A      1   end_date 17/07/2012      3
719A      2   end_date 26/07/2012      3
719A      3   end_date 09/10/2012      3
719A      4   end_date 21/12/2012      3
737A      1   end_date 06/07/2012      3
737A      2   end_date 26/07/2012      3
737A      3   end_date 16/10/2012      3
737A      4   end_date 28/12/2012      3
")->con,header=T);close(con)

我使用以下命令创建了一个绘图

ggplot(mdfr, aes(as.Date(value, "%d/%m/%Y"), name, colour = factor(stadio))) +
    geom_line(size = 5) +
    xlab("") + ylab("") + labs(colour="Title") +
    scale_colour_brewer(pal="RdYlGn",breaks = c("1", "2", "3","4"), labels = c("Label 1", "Label 2", "Label 3","Label 4"))

我需要你的帮助来做以下事情:

  1. 更改名称以A 结尾的行的条形大小。也就是说,我希望大小等于变量rating 的值,而不是使用geom_line(size = 5),即以B 结尾的名称为5,以A 结尾的名称为3。

  2. 是否可以将名称中具有相同编号的条形图做成一对,以便看起来像有 11 对而不是 22 个单独的?例如737A 比 734B 更接近 737B。 (所以看起来像that chart)。

  3. 如果出现第二个(或第三个)图例,如何抑制所选图例的出现? - 因为使用opts(legend.position = "none") 会使它们全部不可见。

  4. 为什么这个 ggplot 命令会在 ggplot 0.9.1 中生成错误,而我使用 ggplot 0.8.9 可以? (scale_map.discrete(scale, df[[j]]) 中的错误:尝试应用非函数)。我应该如何修改它?

提前致谢

编辑

我在第 4 题中发现了问题。我应该给palette="RdYlGn",而不是pal="RdYlGn"。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:
    library(ggplot2)
    library(stringr)
    
    # This solves issue #2
    mdfr <- mdfr[order(mdfr$name), ]
    
    # This grabs the last letter (A or B)
    mdfr$letter_size <- ifelse(str_sub(mdfr$name, start=-1)=="B", 5, 3)
    
    # This solves #1 for you by scaling the size of the bar by letter.
    # the scale_size() option removes it from the legend and solves #3.
    ggplot(mdfr, aes(as.Date(value, "%d/%m/%Y"), name, colour = factor(stadio))) +
        geom_line(aes(size = mdfr$letter_size)) + 
        scale_size(guide="none") + 
        xlab("") + ylab("") + 
        labs(colour="Title")  + 
        scale_colour_brewer(palette = "RdYlGn", breaks = c("1", "2", "3","4"), 
            labels = c("Label 1", "Label 2", "Label 3","Label 4"))
    

    【讨论】:

    • 我试过这个,但我不想在宽度上有这么大的差异。我希望酒吧只窄一点。但我做不到。感谢 scale_size()。 scale_size_manual 似乎可以解决问题(正如我在另一个答案中看到的那样)。但是它在 ggplot 0.8.9 中不起作用
    • 为什么不更新您的ggplot 版本?你有什么理由必须使用0.8.9吗?
    • 你很聪明。是否可以通过任何方式使用不同的啤酒调色板来制作更细的线条?
    【解决方案2】:

    编辑,我看错了第一个问题

    1) 使用带有尺寸的评级作为审美。

    2) 使用您提供的数据,以这种方式绘制数据,但您可以在 ggplot 中按顺序对其进行排序。

    3) 在要删除的刻度中使用guide = none

    ggplot(mdfr[order(mdfr$name),], aes(as.Date(value, "%d/%m/%Y"), name, colour = factor(stadio))) +
      geom_line(aes(size = as.factor(rating))) +
     labs(colour="Title", x = "", y = "") +
     scale_size_manual(breaks = c("3","5"), values = c(3,5), guide = "none")+
      scale_colour_brewer(palette="RdYlGn",breaks = c("1", "2", "3","4"), 
                          labels = c("Label 1", "Label 2", "Label 3","Label 4"))
    

    【讨论】:

    • 非常感谢。什么样的数据可以帮助我在 2 号中创造效果?
    猜你喜欢
    • 2015-12-25
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2012-02-02
    • 2012-04-12
    相关资源
    最近更新 更多