gpt4 book ai didi

R:从 ggplot 对象中提取比例名称

转载 作者:行者123 更新时间:2023-12-01 12:34:05 27 4
gpt4 key购买 nike

我想知道如何以最通用的方式从 ggplot 对象中提取比例名称(即图例名称)。最一般的意思是,无论您如何更改比例名称,无论是在 scale 函数中使用 name 还是使用 labs

例如:

library("ggplot2")
set.seed(3489243)
rho <- round(rnorm(25, 0, 5))
profit <- 0.5 + 0.3 * rho + rnorm(25, 0, 1)
BetaAdjusted <- factor(c(rep(TRUE, 15), rep(FALSE, 10)))
returns.both <- data.frame(rho, profit, BetaAdjusted)
p1 <- ggplot(aes(x=rho, y=profit, shape = BetaAdjusted),
data=returns.both) +
geom_point() + scale_shape_discrete(name = "Is Beta Adjusted?")
p2 <- ggplot(aes(x=rho, y=profit, shape = BetaAdjusted),
data=returns.both) +
geom_point() + labs(shape = "Is Beta Adjusted?")

我想使用相同的代码从 p1p2 中提取文本 Is Beta Adjusted。那可能吗?使用 labs(p2) 给我标签列表下的文本,但使用 labs(p1) 给我比例列表下的文本。我不想根据用户输入查看相同文本的两个位置。毕竟,p1p2 生成的图看起来是一样的。

最佳答案

此解决方案在很大程度上取决于比例实现,因此请谨慎使用(因为 ggplot2 可能会在某些时候改变这一点)。

p <- qplot(vs, wt, shape = factor(gear), color = factor(am), data = mtcars)

guide_names <- function(p, aes = c("shape", "colour", "size")) {
sc <- as.list(p$scales)$scales
nms <- lapply(sc, "[[", "name")
if (length(nms) > 0) names(nms) <- lapply(sc, "[[", "aesthetics")
modifyList(p$labels[names(p$labels) %in% aes], nms)
}

guide_names(p)
# $colour
# [1] "factor(am)"
#
# $shape
# [1] "factor(gear)"

guide_names(p + labs(shape = "A") + labs(color = "B"))
# $colour
# [1] "B"
#
# $shape
# [1] "A"

guide_names(p + scale_shape_discrete(name = "S") + scale_color_discrete(name = "C"))
# $colour
# [1] "C"
#
# $shape
# [1] "S"

# if both are specified, scale_* is prefered
guide_names(p + labs(shape = "A") + scale_shape_discrete(name = "S"))
# $shape
# [1] "S"
#
# $colour
# [1] "factor(am)"

关于R:从 ggplot 对象中提取比例名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31118785/

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