R、 ggplot2:如何在ggplot2中可视化图形对象的数据、属性和其他组件的继承或流?

R、 ggplot2:如何在ggplot2中可视化图形对象的数据、属性和其他组件的继承或流?,r,inheritance,ggplot2,visualization,graph-visualization,R,Inheritance,Ggplot2,Visualization,Graph Visualization,我常常不确定ggplot2中图形对象的哪些数据元素、属性和其他组件是由哪些其他元素继承的,以及向下流动的默认值(例如几何图形)来自何处。在特定情况下,这些问题通常可以通过仔细阅读哈德利的《代码》ggplot2来回答。但是我会发现在ggplot2中对继承的整体流程进行某种可视化非常有用,我想知道是否有人见过、创建过或知道如何创建这样的东西。同样,在一个规范级别(如aes或主题)中出现并由另一个级别(如geom或scale)继承的一个紧凑的默认值列表对我来说非常有用,我怀疑对于许多学习如何使用ggp

我常常不确定
ggplot2
中图形对象的哪些数据元素、属性和其他组件是由哪些其他元素继承的,以及向下流动的默认值(例如几何图形)来自何处。在特定情况下,这些问题通常可以通过仔细阅读哈德利的《代码》ggplot2来回答。但是我会发现在
ggplot2
中对继承的整体流程进行某种可视化非常有用,我想知道是否有人见过、创建过或知道如何创建这样的东西。同样,在一个规范级别(如aes或主题)中出现并由另一个级别(如geom或scale)继承的一个紧凑的默认值列表对我来说非常有用,我怀疑对于许多学习如何使用ggplot2的人来说

我接受以下任何一项作为答案:

  • 继承可视化(可能作为网络?)或指针 同样的
  • 用于构造继承可视化或指向的指针的代码 一样
  • 一种可供选择的、非视觉的方法,使其变得简单,或者至少 更容易理解和记住这样的继承和回答 具体问题
  • 一个参数默认值列表,显示它们出现的位置和位置 哪些附属函数继承它们,或生成此类函数的代码 名单

  • 这个问题似乎是关于ggplot包的多个级别的,但我会尽力提供一些信息。几乎不可能在一个堆栈溢出答案中描述ggplot的整个继承系统,但是指出正确的函数可能有助于开始

    在顶层,数据和美学映射都继承自主ggplot调用。在下面的代码中,
    geom_point()
    继承映射和数据:

    ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
      geom_point()
    
    除非明确提供替代映射并将继承设置为false:

    ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
      geom_point(aes(Petal.Width, Petal.Length), inherit.aes = FALSE)
    
    接下来,在各个层的级别上,从stats、geom或positions继承某些默认值。考虑下面的情节:

    df <- reshape2::melt(volcano)
    
    ggplot(df, aes(Var1, Var2)) +
      geom_raster()
    
    了解层是如何给定其参数的另一个关键因素是查看
    layer()
    code。具体而言,此处的这一位(为清晰起见缩写):

    在这里,您可以看到一些默认的比例也包含在这里。当然,如果您不了解调用这些层函数的操作顺序,那么这些层所做的事情就没有多大意义。为此,我们可以查看plot builder(为清晰起见,缩写):

    完成此函数后,您将拥有一个gtable对象,该对象可由
    grid::grid.draw()
    解释,该对象将输出到图形设备

    不幸的是,我不太熟悉主题元素的继承,但正如Jon Spring在评论中指出的那样,一个好的起点是文档。
    希望我已经指出了在ggplot中查找继承模式的函数。

    这个问题似乎是关于ggplot包的多个级别的,但我会尽力提供一些信息。几乎不可能在一个堆栈溢出答案中描述ggplot的整个继承系统,但是指出正确的函数可能有助于开始

    在顶层,数据和美学映射都继承自主ggplot调用。在下面的代码中,
    geom_point()
    继承映射和数据:

    ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
      geom_point()
    
    除非明确提供替代映射并将继承设置为false:

    ggplot(iris, aes(Sepal.Width, Sepal.Length)) +
      geom_point(aes(Petal.Width, Petal.Length), inherit.aes = FALSE)
    
    接下来,在各个层的级别上,从stats、geom或positions继承某些默认值。考虑下面的情节:

    df <- reshape2::melt(volcano)
    
    ggplot(df, aes(Var1, Var2)) +
      geom_raster()
    
    了解层是如何给定其参数的另一个关键因素是查看
    layer()
    code。具体而言,此处的这一位(为清晰起见缩写):

    在这里,您可以看到一些默认的比例也包含在这里。当然,如果您不了解调用这些层函数的操作顺序,那么这些层所做的事情就没有多大意义。为此,我们可以查看plot builder(为清晰起见,缩写):

    完成此函数后,您将拥有一个gtable对象,该对象可由
    grid::grid.draw()
    解释,该对象将输出到图形设备

    不幸的是,我不太熟悉主题元素的继承,但正如Jon Spring在评论中指出的那样,一个好的起点是文档。
    希望,我已经指出了在ggplot中寻找继承模式的函数。

    对于真正需要什么,似乎非常广泛和不清楚。(并且询问到外部资源的链接被视为超出了SO问题的范围。)查看ggplot2帮助文档的索引页几乎显示了一整页geoms。这个问题看起来确实相当广泛。如果在给定的ggplot2调用中谈论数据或美学,则它们仅从初始的
    ggplot(…)
    行继承,并且仅限于它们出现的范围。如果您谈论的是主题组件,那么其中的帮助将在父主题元素更改下游值的地方指定“从X继承”。关于真正需要什么,似乎相当广泛和不清楚。(并且询问到外部资源的链接被视为超出了SO问题的范围。)查看ggplot2帮助文档的索引页几乎显示了一整页geoms。这个问题看起来确实相当广泛。如果在给定的ggplot2调用中谈论数据或美学,则它们仅从初始的
    ggplot(…)
    行继承,并且仅限于它们出现的范围。如果您谈论的是主题组件,那么其中的帮助将指定“从X继承”,只要父主题元素更改
    > ggplot2:::ggplot_build.ggplot
    function (plot) 
    {
    ...
        data <- by_layer(function(l, d) l$setup_layer(d, plot))
    ...
        data <- by_layer(function(l, d) l$compute_aesthetics(d, plot))
        data <- lapply(data, scales_transform_df, scales = scales)
    ...
        data <- layout$map_position(data)
        data <- by_layer(function(l, d) l$compute_statistic(d, layout))
        data <- by_layer(function(l, d) l$map_statistic(d, plot))
        scales_add_missing(plot, c("x", "y"), plot$plot_env)
        data <- by_layer(function(l, d) l$compute_geom_1(d))
        data <- by_layer(function(l, d) l$compute_position(d, layout))
    ...
        data <- by_layer(function(l, d) l$compute_geom_2(d))
        data <- by_layer(function(l, d) l$finish_statistics(d))
    ...
        structure(list(data = data, layout = layout, plot = plot), 
            class = "ggplot_built")
    }
    
    ggplot2:::ggplot_gtable.ggplot_built