R ggplot2中的继承限制是什么?

R ggplot2中的继承限制是什么?,r,ggplot2,eval,R,Ggplot2,Eval,我一直在尝试了解关于ggplot2的一些事情,以及补充参数是如何从第一部分继承的ggplot()。具体来说,如果继承是在geom.***部分之外传递的 我有一个数据直方图: ggplot(data = faithful, aes(eruptions)) + geom_histogram() 这将生成一个精细的图表,尽管默认为中断。在我(一个公认的新手)看来,geom\u histogram()继承了ggplot()的数据规范。如果我想用一种更聪明的方法设置休息时间,我可以使用这样的过程: gg

我一直在尝试了解关于ggplot2的一些事情,以及补充参数是如何从第一部分继承的
ggplot()
。具体来说,如果继承是在
geom.***
部分之外传递的

我有一个数据直方图:

ggplot(data = faithful, aes(eruptions)) + geom_histogram()
这将生成一个精细的图表,尽管默认为中断。在我(一个公认的新手)看来,
geom\u histogram()
继承了
ggplot()
的数据规范。如果我想用一种更聪明的方法设置休息时间,我可以使用这样的过程:

ggplot(data = faithful, aes(eruptions)) + 
geom_histogram(breaks = seq(from = min(faithful$eruptions), 
                            to = max(faithful$eruptions), length.out = 10))
但是,这里我在
geom_histogram()
函数中重新指定我想要的
忠实$expreations
。我一直无法找到一种不重新指定的表达方式。此外,如果我在
geom_histogram()
中使用
data=
参数,并在
min
max
中仅指定
爆发
seq()
仍然不理解我指的是
忠实的
数据集


我知道
seq
不是ggplot2的一部分,但我想知道它是否可以继承,因为它被绑定在
geom\u histogram()
中,它本身继承自
ggplot()
。我只是使用了错误的语法,还是这是可能的?

根据ggplot2文档,似乎
+
运算符实际上是
+.gg
函数允许将以下对象添加到ggplot对象: data.frame、uneval、层、主题、比例、坐标、面

除非另有说明,否则
geom
函数是创建从“上述”ggplot对象继承
数据和
aes
的层的函数


但是,ggplot对象和函数在全局环境中“活动”,因此调用一个函数,如
seq
,它不会从上面列出的对象创建ggplot对象,也不会继承ggplot对象的主题(使用
+
操作符应用于上面列出的对象)生活在不包含对象的全球环境中请注意,您要寻找的术语不是“继承”,而是非标准评估(NSE)
ggplot
提供了几个地方,您可以通过列名而不是完全引用(NSE)来引用数据项,但这些都是
映射到
geom.*
层的
参数,即使在使用
aes
时也是如此。这些工作:

ggplot(faithful) + geom_point(aes(eruptions, eruptions))
ggplot(faithful) + geom_point(aes(eruptions, eruptions, size=waiting))
以下内容不起作用,因为我们指的是
aes
之外的
waiting
mapping
(注意
geom.*
的第一个参数是
mapping
arg):

但这是可行的:

ggplot(faithful) + geom_point(aes(eruptions, eruptions), size=faithful$waiting)
尽管从现在起有所不同,
size
被随意解释,而不是作为
映射的一部分进行规范化

在您的情况下,由于
中断
不是
aes
/
映射
规范的一部分,因此您不能使用NSE,只能使用完整参考。一些可能的解决办法:

ggplot(data = faithful, aes(eruptions)) + geom_histogram(bins=10)  # not identical
ggplot(data=faithful, aes(eruptions)) + 
  geom_histogram(
    breaks=with(faithful,  # use `with`
      seq(from=max(eruptions), to=min(eruptions), length.out=10)
  ) )
没有NSE,但打字少一点:

ggplot(data=faithful, aes(eruptions)) + 
  geom_histogram(
    breaks=do.call(seq, c(as.list(range(faithful$eruptions)), len=10))
  )

我不知道你所问的是可能的,我会告诉你,而不是最小/最大,顺便说一句,@grrgrrbla,很可能不是。我只是想弄清楚什么是,什么不是。谢谢你的提示:)这并不能完全回答你的问题,但是你可以通过分别编写aes(x=爆发)和min(x)和max(x)来缩短你的代码。@maj,恐怕我无法做到这一点。我在
ggplot()
geom\u histogram()
中尝试了一些排列的
aes(x=喷发)
,然后替换
min/max
。你能说得更具体一点吗?@DaveRGP,我只是说,
ggplot(data=family,aes(x=expreations))+geom_直方图(breaks=seq(from=min(x),to=max(x),length.out=5))
与你两次使用
family$expreations的示例具有相同的效果。
ggplot(data=faithful, aes(eruptions)) + 
  geom_histogram(
    breaks=do.call(seq, c(as.list(range(faithful$eruptions)), len=10))
  )