首页 > 解决方案 > 为什么不只有一个统一的 `scale_fill` 函数?

问题描述

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

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

标签: rggplot2colormap

解决方案


我可以想到两个原因。

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

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


推荐阅读