既geoms和统计信息可用于使曲线在R包GGPLOT2,并且它们常常给出相似的结果(例如,geom_area和stat_bin).它们通常也有不同的参数,例如在二维密度图中:
geom_density_2d(mapping = NULL, data = NULL, stat = "density2d",
position = "identity", ..., lineend = "butt", linejoin = "round",
linemitre = 1, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)
stat_density_2d(mapping = NULL, data = NULL, geom = "density_2d",
position = "identity", ..., contour = TRUE, n = 100, h = NULL, na.rm =
FALSE, show.legend = NA, inherit.aes = TRUE)
Run Code Online (Sandbox Code Playgroud)
两种类型的物体之间是否存在根本差异?
Chi*_*cht 27
这仅仅是为了补充已接受的答案.
根据ggplot2的作者Hadley Wickkam的说法,在他的书"ggplot2:数据分析的优雅图形" (链接在这里)上.第5.2节"逐层构建图"中的91:
你只需要设置stat和geom中的一个:每个geom都有一个默认的stat,每个stat都有一个默认的geom.
上面接受的答案解释了为什么两者不同.这是为了解释为什么它们在实践中难以区分 - 无论何时使用geom层,你也隐式使用stat层(即使它只是身份转换); 同样,无论何时使用stat图层,您也隐式使用geom图层.
如果您对任一层使用的默认值都没问题,那么明确说明两个层将是多余的.即使您对任一图层提供的默认值都不满意,也可以将默认值修改为每个图层的参数(即您可以将默认geom修改为参数以传递给任何stat_*函数,并且您可以将默认属性修改为传递给任何geom_*函数的参数).用Hadley Wickham的话来说(与上面相同):
您可以传入params
...(在这种情况下,stat和geom参数会自动分开)
这在概念上很难理解,这就是为什么我也有这个问题.在他的论文中,关于ggplot2的基础哲学,在第4节中找到了"默认层次结构",Hadley Wickham在简化代码方面解释了这种默认行为背后的实际考虑,否则这些代码会不必要地长.
例如,没有默认规范,并且仅使用图形语法,简单散点图的代码可能如下所示:
ggplot() +
layer(
data = diamonds, mapping = aes(x = carat, y = price),
geom = "point", stat = "identity", position = "identity"
) +
scale_y_continuous() +
scale_x_continuous() +
coord_cartesian()
Run Code Online (Sandbox Code Playgroud)
使用比例和坐标的默认值,我们可以写一些东西,如:
ggplot(data = Diamonds, aes(x = carat, y = price)) +
layer(
geom = "point", stat = "identity", position = "identity"
)
Run Code Online (Sandbox Code Playgroud)
但是,这仍然的烦人病程长,因为值stat和position只是"identity",这基本上意味着"什么也不做" -那么,为什么非要说明确?
但是,该layer()函数没有stat或的默认值position- 它们需要在layer()函数调用中明确指定.
为了解决这个问题,Hadley将geom_*函数和函数作为stat_*函数的包装器,layer()它们具有geom和stat参数的默认值.stat_*和geom_*函数之间的区别在于哪个参数具有不可变(不可更改)的默认值,stat或者geom.
资料来源:http://ggplot2.tidyverse.org/reference/layer.html
因此,对于geom_*函数,您可以更改stat参数的默认值,但不能更改参数的默认值geom,而对于stat_*函数,您可以更改geom参数的默认值,但不能更改参数的默认值stat.
图层是数据,stat和geom的组合,具有潜在的位置调整.通常使用
geom_*或stat_*调用创建图层,但也可以使用此函数[layer()函数] 直接创建图层.
lmo*_*lmo 15
geoms代表"几何对象".这些是您在绘图中看到的核心元素,对象如点,线,区域,曲线.
统计数据代表"统计变革".这些对象以不同的方式汇总数据,例如计算观察值,创建最适合数据的黄土线,或者向黄土线添加置信区间.
由于geoms是绘图的"核心",因此这些是必需的对象.另一方面,统计数据不需要生成情节,但可以大大提高最终情节.
正如@ eipi10在评论中指出的那样,这些区别在某种程度上是概念性的,因为大多数geoms在绘制之前经历了一些统计变换.这些措施包括geom_bar,geom_smooth,和geom_quantile.数据以或多或少的"原始"形式呈现的一些常见例外是geom_point和geom_line不太常用的geom_rug.