aes() 中的传递选项和 ggplot2 中的传递选项之间的区别

Posted

技术标签:

【中文标题】aes() 中的传递选项和 ggplot2 中的传递选项之间的区别【英文标题】:Difference between passing options in aes() and outside of it in ggplot2 【发布时间】:2012-07-15 17:59:14 【问题描述】:

在 ggplot2 中摆弄点大小选项后,我注意到在 geom_point()aes() 参数内部和外部传递大小的示例。来自`geom_point() page on Hadley's site:

p <- ggplot(mtcars, aes(wt, mpg))

# passed inside
p + geom_point(aes(size = qsec)) 
p + geom_point(aes(size = qsec)) + scale_area() 

# passed outside
p + geom_point(colour = "red", size = 3) 
p + geom_point(colour = "grey50", size = 4)

我发现当涉及到图例时,它们的行为有所不同。当通过aes() 内部时,我可以看到一个图例,尽管我需要设置中断,即使我只有两个不同大小的点;否则,即使只使用了 2 个,我也会得到 5 个点大小的范围。

此外,传递的尺寸没有意义。我需要使用range=c(min,max) 指定相对大小,并将中断设置为两个大小,而不是默认的五个。

如果我通过aes() 之外的尺寸,尺寸似乎很荣幸,但我无法在我的情节上获得图例;我尝试了scale_sizescale_size_continuousscale_size_manual,但均未成功。

geom_point() 页面上是这样的:

geom_point 可以使用以下美学。美学是 用aes函数映射到数据中的变量:geom_point(aes(x = var))

...

尺度控制变量如何映射到美学并在每个美学之后列出。

[此处列出所有美学选项(形状、颜色、大小等)]

由此,尚不清楚aes() 内部和外部的选项(此问题中的大小,但这对其他美学应该有意义)如何影响结果。

【问题讨论】:

【参考方案1】:

当在aes 中指定时,美学被映射到数据中变量的值。由于数据和视觉美学之间存在映射,因此有一个图例显示了这种映射。在aes 调用之外,美学只是设置 到一个特定的值。在您展示的示例中,所有点的大小(和颜色)都设置为相同的值。在这种情况下,不需要图例,因为大小(或颜色)不传达任何意义(关于基础数据)。

您在图例中看到的问题是由于映射到连续变量的大小。碰巧这个变量在您的数据中只有两个值,但原则上,连续变量可以采用任何值。如果它真的只是一个二选一的变量,请将其作为一个因素(在原始数据中或在美学调用中aes(size=factor(qsec))

【讨论】:

知道了。我的具体情况可能是由于对具有相同总因子水平的两个不同数据集使用了两次geom_point() 调用。我想要一组 size=n,另一组 size=m。也许因为如果我在aes() 之外调用,每个geom_point() 调用只会看到一个静态大小,它不会添加图例? (我提到这一点是因为我在 aes() 之外使用特定值调用...但由于两次这样的调用是使用不同的大小选项进行的,所以 的大小有含义。 执行您想要的操作的惯用方法是将两个数据集放入单个 data.frame 中,并使用一个新列标识它来自哪个数据集。然后可以将 size 映射到该变量,并且可以使用 scale_size_manual 将大小设置为您想要的大小。或者,您可以将大小分配给字符串常量(一个是aes(size="set1"),另一个是aes(size="set2")),然后使用scale_size_manual 将这些中断映射到特定的标签和大小(values)。例如,参见***.com/q/11159072/892313

以上是关于aes() 中的传递选项和 ggplot2 中的传递选项之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

带有 ggplot2 的标准 eval 没有 `aes_string()`

GGplot2 - aes(填充)的问题

从 ggplot2 中的图例类别中删除 stat_summary 符号

在 Windows 和 Mac 上更改 ggplot2 中的字体

scala中的传名调用

使用交互和指南修改ggplot2中的图例