可以使用geoms和stats在R包ggplot2中制作图,并且它们通常会给出类似的结果(例如,geom_area和stat_bin)。它们通常也有不同的论点,例如:在2-D density plots中:
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)
两种类型的物体之间是否存在根本差异?
答案 0 :(得分:21)
这只是为了补充已接受的答案。
ggplot2的作者Hadley Wickkam在他的着作“ggplot2:数据分析的优雅图形”中表示。 (link here)在第2页。第5.2节'逐层建立一个地块' :
你只需要设置stat和geom中的一个:每个geom都有一个默认的stat,每个stat都有一个默认的geom。
上面接受的答案解释了为什么两者不同。这是为了解释为什么它们在实践中难以区分 - 无论何时使用geom层,你也隐式使用stat层(即使它只是身份转换);同样,无论何时使用stat图层,您都隐式使用geom图层。
如果对任一层使用的默认值都没问题,那么明确说明两个层将是多余的。即使您对任一图层提供的默认值都不满意,您也可以将默认值修改为每个图层的参数(即您可以将默认geom修改为参数以传递给任何stat_*
函数,并且您可以修改默认stat作为传递给任何geom_*
函数的参数)。用Hadley Wickham的话来说(与上面相同):
您可以在
...
中传递参数(在这种情况下,stat和geom参数会自动分开)
这在概念上很难理解,这就是我也有这个问题的原因。在他的关于ggplot2 found here的基础哲学的论文中,在第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()
使用比例和坐标的默认值,我们可以写一些代码,如:
ggplot(data = Diamonds, aes(x = carat, y = price)) +
layer(
geom = "point", stat = "identity", position = "identity"
)
但这仍然是仍然当然很烦人,因为stat
和position
的值只是"identity"
,这基本上意味着&#39}什么' - 那么为什么要明确说出来呢?
但是,layer()
函数没有stat
或position
的默认值 - 需要在调用layer()
函数时明确指定它们。 / p>
为了解决这个问题,Hadley将geom_*
函数和stat_*
函数作为wrappers函数发送到layer()
函数,它们具有geom
的默认值1}}和stat
参数。 stat_*
和geom_*
函数之间的区别在于哪个参数具有不可变(不可更改)默认值stat
或geom
。
来源:http://ggplot2.tidyverse.org/reference/layer.html
因此对于geom_*
函数,您可以更改stat
参数的默认值,但不能更改geom
参数的默认值,而对于stat_*
函数,您可以可以更改geom
参数的默认值,但不能更改stat
参数的默认值。
图层是数据,stat和geom的组合,具有潜在的位置调整。通常使用
geom_*
或stat_*
调用创建图层,但也可以使用此函数[layer()
函数]直接创建图层。
答案 1 :(得分:13)
geoms代表“几何对象”。这些是您在绘图中看到的核心元素,对象如点,线,区域,曲线。
统计数据代表“统计变革”。这些对象以不同的方式汇总数据,例如计算观察值,创建最适合数据的黄土线,或者向黄土线添加置信区间。
由于geoms是绘图的“核心”,因此这些是必需的对象。另一方面,生成情节不需要统计数据,但可以大大提高最终情节。
正如@ eipi10在评论中指出的那样,这些区别在某种程度上是概念性的,因为大多数geoms在绘制之前经历了一些统计变换。其中包括geom_bar
,geom_smooth
和geom_quantile
。数据以“原始”形式呈现的一些常见例外是geom_point
和geom_line
以及不太常用的geom_rug
。
答案 2 :(得分:1)
geom用于几何表示,而stat用于统计信息和表示。我认为geom有时会使用某些统计信息功能,例如stat_count()
使用的geom_bar()
。在这种情况下,geom_bar使用一个参数(x或y),而stat_count负责频率计数。