【问题标题】:ggplot2: applying width of line to the legend keyggplot2:将线宽应用于图例键
【发布时间】:2015-03-05 08:08:44
【问题描述】:

考虑到data.frame“dfc”:

dfc <- structure(list(lag = c(-5L, -4L, -3L, -2L, -1L, 0L, 1L, 2L, 3L, 
       4L, 5L, -5L, -4L, -3L, -2L, -1L, 0L, 1L, 2L, 3L, 4L, 5L), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("var1", "var2"), class = "factor"), 
value = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0.6, 1.2, 1.8, 
2.4, 3, 3.6, 4.2, 4.8, 5.4, 6, 6.6), size = c(2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), .Names = c("lag", 
"variable", "value", "size"), row.names = c(NA, -22L), class = "data.frame")

看起来像:

head(dfc)
  lag variable value size
1  -5     var1     1    2
2  -4     var1     2    2
3  -3     var1     3    2
4  -2     var1     4    2
5  -1     var1     5    2
6   0     var1     6    2

我想用不同的线型(取决于“变量”)和宽度(取决于“大小”)绘制“值”与“滞后”。我用这段代码实现了:

ggplot(dfc) +
geom_line(aes(x = lag, y = value, linetype = variable, size = size)) +
scale_size(range=c(1, 2), guide=FALSE) +
scale_linetype_manual(values = 1:2, labels = c("Name of var1    ", "Name of var2")) +
theme(legend.title = element_blank(), legend.position = "bottom",
      legend.direction = "horizontal")

给出这个情节:

但我不知道如何相应地更改图例中线条的大小并保持重命名。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:
    z <- ggplot(dfc) + 
         geom_line(aes(x = lag, y = value, linetype = variable, size = size)) + 
         scale_size(range=c(1, 2), guide=FALSE)
    z <- z + theme(legend.key.width = unit(5,"cm"))
    z <- z + guides(linetype = guide_legend(override.aes = list(size = 2)))
    z
    

    我已将guides() 函数添加到我之前的答案中。

    增加legend.key.width 的宽度后,可以通过使用override.aes 参数并将其分配给linetype 变量来更改图例中线条的大小。

    这可能与@cogitovita 建议的方式不同。

    【讨论】:

    • var2 应该是 1,而不是 2。如上所述,我不需要更改键的宽度。
    • 它适用于list(size = c(2,1)) in guide_legend
    • 澄清一下:legend.key.width 改变了图例符号的 width(在本例中为一条线),而 list(size = 2) 增加了 thickness图例中线条的(或高度)。
    【解决方案2】:

    因为dfc$variable 分组,而$size 在每个组中都是常数。尝试提取$size 并手动设置。

    var_size = c('var1'=2, 'var2'=1)
    ggplot(dfc) + 
    geom_line(aes(x = lag, y = value, linetype = variable, size=variable)) + 
    scale_size_manual(values=var_size)
    

    【讨论】:

    • 好的。我现在意识到我自己的问题不符合我的需要。我必须编辑它。
    【解决方案3】:
    library(ggplot2)
    library(grid)
    
    z <- ggplot(dfc) + geom_line(aes(x = lag, y = value, linetype = variable, size = size)) + 
         scale_size(range=c(1, 2), guide=FALSE)
    
    z <- z + theme(legend.key.width = unit(5,"cm"))
    

    使用ggplot2 库包中的legend.key.width 参数更改图例的宽度

    您可以更改宽度的数值。加载grid 库很重要。否则 R 无法识别“单位”。

    【讨论】:

    • 不,抱歉,它没有。我承认我的要求并不明确。我想更改图例中线条的大小,而不是键本身的长度/宽度。
    猜你喜欢
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多