ggplot2:将线宽应用于图例键
ggplot2: applying width of line to the legend key
考虑 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
我想用不同的线条样式(取决于 "variable) and widths (depending on " 大小”)针对 "value" 绘制 "value"。我用这段代码实现了:
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")
给出这个情节:
但我不知道如何同时相应地更改图例中线条的大小,并保持重命名。
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 无法识别 'unit'。
因为 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)
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 提议的其他方式。
考虑 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
我想用不同的线条样式(取决于 "variable) and widths (depending on " 大小”)针对 "value" 绘制 "value"。我用这段代码实现了:
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")
给出这个情节:
但我不知道如何同时相应地更改图例中线条的大小,并保持重命名。
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 无法识别 'unit'。
因为 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)
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 提议的其他方式。