ggplot2中的geoms和stats有什么区别?
geom和stats都可以用于在R软件包ggplot2中绘制图表,并且它们通常会给出类似的结果(例如,geom_area和stat_bin)。他们也经常有稍微不同的论点,例如在2-D density plots:ggplot2中的geoms和stats有什么区别?
geom_density_2d(映射= NULL,数据= NULL,STAT = “density2d”, 位置= “同一性”,...,lineend = “对接”,linejoin = “圆”, linemitre = 1,na.rm = FALSE,show.legend = NA,inherit.aes = TRUE)
stat_density_2d(mapping = NULL,data = NULL,geom =“density_2d”, position =“identity”,.. 。,轮廓= TRUE,N = 100,H = NULL,na.rm = FALSE,show.legend = NA,inherit.aes = TRUE)
这两种类型的对象之间是否有任何根本的区别?
geoms代表“几何对象”。这些是你在图上看到的核心元素,像点,线,面,曲线这样的对象。
统计数据表示“统计转换”。这些对象以不同的方式总结数据,例如计数观测数据,创建最适合数据的黄土线,或者向黄土线添加置信区间。
由于几何是情节的“核心”,这些都是必需的对象。另一方面,数据并不需要产生一个情节,但可以大大提高最终情节。
As @ eipi10在评论中注释,这些区别在某种程度上是概念性的,因为大多数geoms在绘制之前都会进行一些统计转换。这些包括geom_bar
,geom_smooth
和geom_quantile
。数据以大致“原始”形式呈现的一些常见例外是geom_point
和geom_line
以及不太常用的geom_rug
。
这只是为了补充接受的答案。
根据ggplot2的作者Hadley Wickkam在他的书“ggplot2:Elegant Analysis for Data Analysis”(link here) on page。 91,第5.2节“由层构建的情节层”的:
你只需要设置统计和GEOM之一:每GEOM有一个默认的统计,每个统计都有一个默认GEOM。
上面接受的答案很好地解释了为什么两者不同。这是为了解释为什么它们在实践中很难区分 - 无论何时使用geom层,您还隐式使用stat层(即使它只是标识转换);同样,无论何时使用统计图层,您也都隐式使用了一个geom图层。
如果你对任何一层使用的默认值都没有问题,那么明确指出两层都是多余的。即使您对任何图层提供的默认设置都不满意,您也可以将默认值修改为每个图层的参数(例如,您可以将默认geom作为参数修改为传递给任何stat_*
函数的参数,并且可以将默认值修改为一个参数传递给任何geom_*
函数)。哈德利韦翰的话(相同的源如上):
可以传递在
...
PARAMS(在这种情况下,统计和的geom参数自动挑开)
这是种难以在概念上理解,这就是为什么我也有这个问题。在他关于哲学基本GGPLOT2,found here,在第4节提出了一种“默认的层次”,哈德利韦翰解释简化代码,否则将不必要的长时间的条款背后的默认行为的实际考虑。
例如,如果没有默认规格,并使用单独的图形的语法,一个简单的散点图的代码可能看起来像:
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"
,whic h基本上意味着'无所事事' - 那么为什么要明确地说呢?
然而,layer()
功能没有默认值stat
或position
- 他们需要到layer()
函数的调用明确指定。
为了解决这个问题,哈德利取得了geom_*
功能以及作为stat_*
功能wrappers为layer()
函数有默认值均geom
和stat
参数。 stat_*
和geom_*
函数之间的差异是哪个参数具有不变的(不可更改)默认值,stat
或geom
。
来源:http://ggplot2.tidyverse.org/reference/layer.html
所以对于geom_*
功能,你可以改变stat
参数的默认值,但不是geom
参数的默认值,而对于stat_*
功能,你可以改变geom
的默认值参数,但不是stat
参数的默认值。
一层是数据,统计和几何与潜在位置调整的组合。一般层使用
geom_*
或stat_*
呼叫创建,但它也可以直接使用该函数[在layer()
函数]建立。
非常感谢您解释'stat_ *'和'geom_ *'函数实际上是为'layer()'函数提供合理默认值的包装器。对我来说,这是你答案中最令人eye目结舌的方面。我的学生会(间接地)非常感谢你:-) –
提到ggplot的内在哲学的好处是,这有助于理解它是如何工作的 – cloudscomputes
AFAIK统计和geoms总是一起去,但每GEOM有一个默认的统计。所以你不必明确指定一个属性,但是这个属性仍然是必需的。如果你看看[ggplot求助](http://docs.ggplot2.org/current/),你可以看到哪些统计是每个GEOM的默认。你也可以反转这个过程并在调用'stat_xxx()'的时候指定'geom'。大多数情况下,您不必担心这些细节,但如果您想要更改默认行为,则很重要。 – eipi10
可能最常见的情况是'geom_bar',其中默认情况下是对行进行计数(geom_bar的默认统计是'stat_count')。因此,如果您的数据是预先汇总的,您需要指定'stat =“identity”',这意味着不对原始数据进行转换。 – eipi10
感谢您的链接,我会添加一个注释,希望能更好地覆盖这种情绪。 – lmo