如何使用多种美学更改图例大小/在 R 中图例中的变量之间增加 space
How to change legend size with multiple aesthetics/ increase space between variables within legends in R
我的问题分为两部分。下面我提供了示例数据和使用 ggplot
创建代表性图的代码
structure(list(x = c(2.93131952459005, 3.21275054434318, 1.36466997175509,
2.13626543532502, 1.45889556823722, 1.94598707699052, 0.719062322132357,
2.38139571953234, 2.37813367615963, 3.98126576880209), y = c(7.51581380181603,
9.77495763943671, 8.9666894018554, 8.62675858853528, 7.89238665417542,
9.84865061237773, 7.24526820962333, 7.64727218939944, 7.28026738945878,
8.6913070524479), z = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L,
3L, 3L, 3L), .Label = c("a", "b", "c"), class = "factor"), z2 = structure(c(1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("cat", "dog"), class = "factor")), class = "data.frame", row.names = c(NA,
-10L))
ggplot(exampledata, aes(x = x, y = y, color = z, shape = z))+geom_point()+geom_line(aes(color = z, linetype = z2))+
scale_linetype_manual(values = c(1,2,3))+theme(legend.position = 'top')
第 1 部分:存在多种美学时更改图例大小。
当您查看生成的图形时,图例中的项目 z 具有两种与之相关的美学:颜色和形状。但是,它指的是线条颜色,而不仅仅是点 color/shape。我想知道是否有办法增加 z 点的大小(仅在图例中),同时使 z 中的线大小保持不变。我试过 override.aes()
将大小作为参数,但这会增加点和线的大小。
第 2 部分:增加图例中变量之间的 space。
这应该很简单,但我还没有找到直接的答案。在图例中,z 和 z2 显然是独立的组件,但是有没有办法将这些变量之间的 space 作为一个整体来增加?我不是在谈论像 legend.spacing.x
那样增加每个变量的每个级别之间的 space。本质上,我想要在 z 的“c”和 z2 的标题之间有更多的白色space。
要回答您的第 1 部分问题,请参阅 filups21 对以下 SO 问题的回复 ggplot2: Adjust the symbol size in legends。本质上,您需要使用以下代码更改底层网格美学。
# Make JUST the legend points larger without changing the size of the legend lines:
# To get a list of the names of all the grobs in the ggplot
g
grid::grid.ls(grid::grid.force())
# Set the size of the point in the legend to 2 mm
grid::grid.gedit("key-[-0-9]-1-1", size = unit(4, "mm"))
# save the modified plot to an object
g2 <- grid::grid.grab()
ggsave(g2, filename = 'g2.png')
第 2 部分的答案稍微简单一些,只需要对 ggplot2 语句进行少量添加。尝试添加以下内容:+ theme(legend.spacing = unit(5, units = "cm"))
。然后调整单位测量值,直到获得所需的外观。
我的问题分为两部分。下面我提供了示例数据和使用 ggplot
创建代表性图的代码structure(list(x = c(2.93131952459005, 3.21275054434318, 1.36466997175509,
2.13626543532502, 1.45889556823722, 1.94598707699052, 0.719062322132357,
2.38139571953234, 2.37813367615963, 3.98126576880209), y = c(7.51581380181603,
9.77495763943671, 8.9666894018554, 8.62675858853528, 7.89238665417542,
9.84865061237773, 7.24526820962333, 7.64727218939944, 7.28026738945878,
8.6913070524479), z = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L,
3L, 3L, 3L), .Label = c("a", "b", "c"), class = "factor"), z2 = structure(c(1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("cat", "dog"), class = "factor")), class = "data.frame", row.names = c(NA,
-10L))
ggplot(exampledata, aes(x = x, y = y, color = z, shape = z))+geom_point()+geom_line(aes(color = z, linetype = z2))+
scale_linetype_manual(values = c(1,2,3))+theme(legend.position = 'top')
第 1 部分:存在多种美学时更改图例大小。
当您查看生成的图形时,图例中的项目 z 具有两种与之相关的美学:颜色和形状。但是,它指的是线条颜色,而不仅仅是点 color/shape。我想知道是否有办法增加 z 点的大小(仅在图例中),同时使 z 中的线大小保持不变。我试过 override.aes()
将大小作为参数,但这会增加点和线的大小。
第 2 部分:增加图例中变量之间的 space。
这应该很简单,但我还没有找到直接的答案。在图例中,z 和 z2 显然是独立的组件,但是有没有办法将这些变量之间的 space 作为一个整体来增加?我不是在谈论像 legend.spacing.x
那样增加每个变量的每个级别之间的 space。本质上,我想要在 z 的“c”和 z2 的标题之间有更多的白色space。
要回答您的第 1 部分问题,请参阅 filups21 对以下 SO 问题的回复 ggplot2: Adjust the symbol size in legends。本质上,您需要使用以下代码更改底层网格美学。
# Make JUST the legend points larger without changing the size of the legend lines:
# To get a list of the names of all the grobs in the ggplot
g
grid::grid.ls(grid::grid.force())
# Set the size of the point in the legend to 2 mm
grid::grid.gedit("key-[-0-9]-1-1", size = unit(4, "mm"))
# save the modified plot to an object
g2 <- grid::grid.grab()
ggsave(g2, filename = 'g2.png')
第 2 部分的答案稍微简单一些,只需要对 ggplot2 语句进行少量添加。尝试添加以下内容:+ theme(legend.spacing = unit(5, units = "cm"))
。然后调整单位测量值,直到获得所需的外观。