gpt4 book ai didi

r - 在 r ggplot 中使用 scale_color_binned 时限制和中断值的自定义标签

转载 作者:行者123 更新时间:2023-12-05 04:30:44 25 4
gpt4 key购买 nike

我想显示带有断点自定义标签的离散刻度,并包含带有自定义标签的限制。我知道在限制内显示中断时有效的代码,但是当限制处于事件状态时,标记不再适用于此方法

这是有效的方法:

library(ggplot2)

ggplot(mpg, aes(cty, hwy, color = year)) +
geom_point() +
scale_color_binned(limits = c(1999, 2008),
breaks = c(2000, 2002, 2004, 2006),
labels = c('2', '3', '4', '5'),
show.limits = F) # proof that this method works for breaks WITHIN limits

当为该图激活限制时,ggplot 会给出一条错误消息并且不会渲染该图

library(ggplot2)

ggplot(mpg, aes(cty, hwy, color = year)) +
geom_point() +
scale_color_binned(limits = c(1999, 2008),
breaks = c(2000, 2002, 2004, 2006),
labels = c('2', '3', '4', '5'),
show.limits = T) # method fails when limits are activated

Error in f():! Breaks and labels are different lengths

中断和标签显然是相同的长度。也许关于激活限制的某些事情会改变标签向量的形成方式?我知道在哪里可以找到 ggplot2 中断向量的代码(使用 ggplot_build() 或直接单击已保存的绘图对象)。我仔细查看了这些内容,但没有发现任何可以帮助我理解如何解决此问题的内容。

我也尝试了这些方法,但它返回了相同的错误'breaks and labels are different lengths':

# this did not work

ggplot(mpg, aes(cty, hwy, color = year)) +
geom_point() +
scale_color_binned(limits = c(1999, 2008),
breaks = c(2000, 2002, 2004, 2006),
labels = c('1', '2', '3', '4', '5', '6')
show.limits = T) # added more entries to label vector did not work

# this also did not work

ggplot(mpg, aes(cty, hwy, color = year)) +
geom_point() +
scale_x_continuous(
breaks = c(0, 20, 40),
labels = c("0", "20", "40")) +
scale_color_binned(breaks = c(1999, 2000, 2002, 2004, 2006, 2008),
labels = c('1', '2', '3', '4', '5', '6'),
show.limits = F) # add limits directly to breaks did not work

一种可用于标记每个条目的方法如下所示。但是,如果离散尺度有多个条目,则此方法很乏味。

ggplot(mpg, aes(cty, hwy, color = year)) +
geom_point() +
scale_color_binned(limits = c('1' = 1999, '6' = 2008),
breaks = c('2' = 2000, '3' = 2002, '4' = 2004, '5' = 2006),
show.limits = T) # this works, but is a tedious solution when writing several breaks

我想使用 scale_color_binned 方法(或类似函数),因为我想将连续刻度数据转换为 15-20 个离散范围,然后为不同范围自定义标签或抑制标签。

有没有办法生成一个 ggplot,它可以接受分箱连续值的自定义标签,同时还能显示数据的指定限制?

最佳答案

如果您使用函数来标记中断,您就会知道发生了什么:

library(ggplot2)

ggplot(mpg, aes(cty, hwy, color = year)) +
geom_point() +
scale_color_binned(limits = c(1999, 2008),
breaks = c(2000, 2002, 2004, 2006),
labels = ~ print(.x),
show.limits = TRUE)
#> [1] 2000 2002 2004 2006
#> [1] 1999 2008

您可以看到,中断标签和限制标签分两个单独的批处理发送到标记函数,因此对于这些批处理中的一个或另一个,固定长度的标签向量总是会失败。确实,您需要一个可以处理以下任一问题的函数:

ggplot(mpg, aes(cty, hwy, color = year)) +
geom_point() +
scale_color_binned(limits = c(1999, 2008),
breaks = c(2000, 2002, 2004, 2006),
labels = ~ if(length(.x) == 2) .x else 1:4,
show.limits = TRUE)

enter image description here

关于r - 在 r ggplot 中使用 scale_color_binned 时限制和中断值的自定义标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71976832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com