Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带因式分解变量和geom_hline/geom_vline的面切割_R_Ggplot2_Facet_Geom Hline - Fatal编程技术网

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感谢您的考虑-但是,它并没有回答我的问题,为什么只有在因子分解时才会发生这种情况。你有什么想法吗。终于明白了哈哈。谢谢