【问题标题】:Why not just one unified `scale_fill` function?为什么不只有一个统一的 `scale_fill` 函数?
【发布时间】:2021-11-18 10:48:26
【问题描述】:

有人可以向我解释为什么scale_fill_discretescale_fill_continuous 需要不同的功能吗? (同样scale_color_*)我知道一些颜色图只为离散数据定义,但对于可重复使用的绘图功能,我不断编写愚蠢的逻辑来检查填充(或颜色)变量是否是离散的以调用正确的scale_fill_*功能。 scale_fill_distillerscale_fill_brewer 相同。

为什么我们不能合并这些函数,如果连续数据需要离散颜色图选项,则只会抛出错误?这已经在内部进行检查以在当前函数中抛出错误。

【问题讨论】:

    标签: r ggplot2 colormap


    【解决方案1】:

    我能想到两个原因。

    首先,这两个函数的默认值是不同的。 scale_fill_discrete 将默认为 type = scale_fill_hue,即 色轮周围均匀分布的颜色。 scale_fill_continuous 将默认为 type = scale_fill_gradient,在两个极端之间均匀分布颜色。 (还有第三个函数scale_fill_binned,属于同一个家族。它也有不同的默认值。)

    第二个原因是风格。如果您不喜欢默认值,您可以通过选项定义自己的。但是离散和连续颜色集相同是没有意义的,因此您需要指定两个默认值。 (它们被命名为"ggplot2.discrete.fill""ggplot2.continuous.fill")。这是一种更简洁的风格,也有两个函数来使用这些选项,而不是一个更复杂的函数在它们之间进行选择。至少在ggplot2 的作者看来。

    【讨论】:

    • 感谢您的回复。我仍然认为根据变量是连续的还是离散的,在默认值之间切换会很简单。您甚至不必更改自定义选项的实现——同样,只需根据变量类型选择一个。我听说过干净的风格,但干净的包代码目前会转化为混乱的用户代码,那么,哪个更糟......?
    • 我认为假设是用户通常知道他们正在使用什么样的数据。如果您拥有的数据不是这种情况,您可能应该编写一个 scale_fill_auto 函数来做出您想要的选择,并使用它:ggplot2 和脚本中的干净代码。当然,考虑到ggplot2 的工作方式,这可能不是一个容易编写的函数。
    • ...如果很难写scale_fill_auto,这是第三个原因。
    • 这基本上就是我所做的。还不错,但我也在尝试从几个外部包中集成颜色图,它们每个都有自己的论点和处理离散变量和连续变量的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多