如何在 scale_color_distiller (ggplot2) 中重新缩放颜色映射?
How to rescale color mapping in scale_color_distiller (ggplot2)?
我的数据由三个数字变量组成。像这样:
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
代码之后 returns 这个情节:
很明显,问题是这一点改变了比例,我们得到了一个信息很少的图。我的解决方案是使用 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()
中对 limits= c(0, 10)
进行 论证,但这没有帮助。
旁注:我不想删除异常值。排名效果很好。我想使用 scale_color_distiller()
。如果可能的话,我不想使用除 ggplot2 之外的任何其他包。
将排名重新调整为原始 df$col 的范围。
library(tidyverse)
set.seed(1)
df <- data.frame(x = rnorm(10000), y = rnorm(10000))
df %>%
mutate(
col = x + y + x * y,
scaled_rank = scales::rescale(rank(col), range(col))
) %>%
ggplot(aes(x, y, col = scaled_rank)) +
geom_point(size = 2) +
scale_color_distiller(palette = "Spectral")
由 reprex package (v2.0.1)
于 2021-11-17 创建
我的数据由三个数字变量组成。像这样:
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
代码之后 returns 这个情节:
很明显,问题是这一点改变了比例,我们得到了一个信息很少的图。我的解决方案是使用 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()
中对 limits= c(0, 10)
进行
旁注:我不想删除异常值。排名效果很好。我想使用 scale_color_distiller()
。如果可能的话,我不想使用除 ggplot2 之外的任何其他包。
将排名重新调整为原始 df$col 的范围。
library(tidyverse)
set.seed(1)
df <- data.frame(x = rnorm(10000), y = rnorm(10000))
df %>%
mutate(
col = x + y + x * y,
scaled_rank = scales::rescale(rank(col), range(col))
) %>%
ggplot(aes(x, y, col = scaled_rank)) +
geom_point(size = 2) +
scale_color_distiller(palette = "Spectral")
由 reprex package (v2.0.1)
于 2021-11-17 创建