【发布时间】:2021-12-28 09:37:42
【问题描述】:
我的数据由三个数值变量组成。像这样的:
set.seed(1)
df <- data.frame(x= rnorm(10000), y= rnorm(10000))
df$col= df$x + df$y + df$x*df$y
将其绘制为热图看起来不错:
ggplot(df, aes(x, y, col= col)) + geom_point(size= 2) + scale_color_distiller(palette = "Spectral")
但实际变量可能有一些偏斜或异常值,这完全改变了情节。在df$col[nrow(df)] <- 100 与上面相同的ggplot 代码之后返回此图:
显然,问题在于这一点改变了比例,我们得到了一个信息很少的图。我的解决方案是使用rank() 对数据进行排名,这为我迄今为止尝试过的任何变量提供了合理的颜色进展。见这里:
ggplot(df, aes(x, y, col= rank(col))) + geom_point(size= 2) + scale_color_distiller(palette = "Spectral")
此解决方案的问题是新比例(2,500 到 10,000)显示为颜色标签。我希望将原始比例显示为颜色标签(o 到 10)。因此,我希望颜色进展与排名数据相对应;即我需要以某种方式将原始值映射到排序的颜色值。那可能吗?我尝试在scale_color_distiller() 内将change limits 参数传递给limits= c(0, 10),但这没有帮助。
旁注:我不想删除异常值。排名效果很好。我想使用scale_color_distiller()。如果可能的话,我不想使用 ggplot2 以外的任何其他软件包。
【问题讨论】:
-
也许你想通过对数转换来重新缩放。不确定转换为排名是否总能准确反映您的数据分布。
-
@tjebo 是的,有different ways 来规范化数据。出于我的目的,使用排名没问题。
-
@tjebo 该链接回答了如何用颜色更好地显示数据的差异。这不是我的问题,因为我用
rank为我解决了这个问题。此外,我尝试了不同的方法,但我无法弄清楚如何将rescale(...)解决方案从您的链接中包含在scale_color_distiller()中。这是建议吗?