美文网首页
6. ggplot图层-after_stat()在做什么?

6. ggplot图层-after_stat()在做什么?

作者: 心惊梦醒 | 来源:发表于2022-09-08 11:33 被阅读0次

      在增加一个layer之前,思考下每个layer的目的,一般来说,一个layer有三种目的:1)展示data,这一层几乎出现在所有图像上。2)展示data的statistical summary,通常在data的基础上绘制。3)添加额外的metadata:context, annotations和references,在background和foreground上都很有用:map(映射)经常用作background layer。
      scales控制从data到aesthetics的映射并提供解释plot的工具(如:axes和legends)。

    a scale defines a mapping from the data space to the aesthetic space

      以下两行代码是等价的,对初学者来说,似乎有些难以理解:

    ggplot(mpg, aes(x = displ)) + geom_histogram()
    ggplot(mpg, aes(x = displ, y = after_stat(count))) + geom_histogram()
    # ggplot(mpg,aes(x=displ,y=..count..)) + geom_histogram()
    # ggplot(mpg,aes(x=displ,y=stat(count))) + geom_histogram()
    # 最后两行是第二行的老版本,你可以在一些旧代码中看到
    

    Every plot has two position scales, corresponding to the x and y aesthetics

     大部分的aesthetics直接使用data中的variables进行映射(例如ggplot(mpg,aes(x=cty,y=hwy,color=class))+geom_point()),但有时想在随后的渲染(即生成图像)过程中延迟map。ggplot2有三个时期的数据可用来做map(见??after_stat):

    • 直接在一开始使用用户提供的layer data(original layer data),如上述例子
    • 使用被layer stat转换后的data(即stat transformed data),如上述代码块中等价的例子
    • 被转换和被plot scales映射之后的data(即scaled data)
        上述代码块中的例子,geom_histogram()得到的柱子的高度不直接来自底层数据mpg,而是来自stat_bin()计算得到的countafter_stat()标志着aesthetic mapping应该推迟到stat transformation之后。
    # 这个例子将最高的柱子scale成1
    ggplot(mpg, aes(displ)) +
      geom_histogram(aes(y = after_stat(count / max(count))))
    
    # 这个例子中,变量class映射到color(即scaled data),alpha()从scaled data中进一步scale,得到的值用于映射到fill
    # alpha()是scale函数
    ggplot(mpg, aes(class, hwy)) +
      geom_boxplot(aes(colour = class, fill = after_scale(alpha(colour, 0.4)))
    

    相关文章

      网友评论

          本文标题:6. ggplot图层-after_stat()在做什么?

          本文链接:https://www.haomeiwen.com/subject/fcxwnrtx.html