R 带因式分解变量和geom_hline/geom_vline的面切割
考虑以下代码:R 带因式分解变量和geom_hline/geom_vline的面切割,r,ggplot2,facet,geom-hline,R,Ggplot2,Facet,Geom Hline,考虑以下代码: require(ggplot2) ggplot(data = mtcars) + geom_point(aes(x = drat, y = wt)) + geom_hline(yintercept = 3) + facet_grid(~ cyl) ## works ggplot(data = mtcars) + geom_point(aes(x = drat, y = wt)) + geom_hline(yint
require(ggplot2)
ggplot(data = mtcars) +
geom_point(aes(x = drat, y = wt)) +
geom_hline(yintercept = 3) +
facet_grid(~ cyl) ## works
ggplot(data = mtcars) +
geom_point(aes(x = drat, y = wt)) +
geom_hline(yintercept = 3) +
facet_grid(~ factor(cyl)) ## does not work
# Error in factor(cyl) : object 'cyl' not found
# removing geom_hline: works again.
帮助我找到一个调试,即将intercept
包装到aes
ggplot(data = mtcars) +
geom_point(aes(x = drat, y = wt)) +
geom_hline(aes(yintercept = 3)) +
facet_grid(~ factor(cyl)) # works
# R version 3.4.3 (2017-11-30)
# ggplot2_2.2.1
作为变量的函数需要在每一层中。(听起来很神秘)
为什么在分解刻面变量时会发生这种情况?下面是我最好的猜测和解释 当哈德利说: 这是一个已知的使用函数的刻面限制-您使用的变量必须出现在每一层上 他的意思是在ggplot中,当你要在facetting函数中使用一个函数时,你需要在每个
geom
中都有这个变量。出现此问题是因为hline
geom
中不存在cyl
变量
重要的是要记住,这是一种限制,而不是理想的行为。更重要的是,他们的高效代码工作的结果是,当使用函数刻面时,变量必须出现在每个geom
中
在不研究ggplot2
函数的细节的情况下,我猜测围绕yintercept
参数包装aes
的作用是为geom\u hline
函数提供一个美学映射。aes
函数将变量映射到绘图的组件,而不是静态值。这是一个重要的区别。尽管我们仍然设置了yintercept=3
,但我们将其放置在美学映射中的事实必须以某种方式指出cyl
也存在于该空间中。也就是说,它将geom_hline
与cyl
间接连接,这意味着它现在位于层中,不再是限制
这可能不是一个完全令人满意的答案,但如果不仔细阅读
ggplot2
代码来尝试找出出现此限制的具体原因,这可能是您目前得到的最好答案。希望这些解决方法中的一个对您来说已经足够了:)从您提供的链接来看,这似乎是一个已知的限制。至少有一个解决办法。@MHammer感谢您的考虑-但是,它并没有回答我的问题,为什么只有在因子分解时才会发生这种情况。你有什么想法吗。终于明白了哈哈。谢谢