我正在处理一个数据集,其中我有一些变量,我一直在使用特定的命名约定来自CSV文件。例如,我会有类似的东西:
p <- ggplot(plot_df, aes(x=ms, y=bandwidth)) + geom_line()
默认情况下,图表的x和y标题分别为'ms'和'bandwidth'。我希望能够做的是定义一个具有这些映射列表的函数,如:
"bandwidth"->"Bandwidth (GB/s)"
"ms"->"Time (ms)"
所以我可以将p
提供给一个基本上执行的函数:
p + xlab("Time (ms)") + ylab("Bandwidth GB/s")
自动,我不必继续指定标签应该是什么。为了做到这一点,我需要以某种方式访问x和y标题作为字符串。我很难弄清楚如何从p
中获取这些信息。
编辑: 我猜通常y轴因为融化而出现'值',但为了论证,我们只是说我现在正在做x轴。
答案 0 :(得分:6)
它们存储在p$mapping
(查看str(p)
)
除非您想通过字符串操作做一些非常奇特的事情,否则查找表可能是在变量名称和正确标签之间进行转换的最佳选择
例如
d <- data.frame(x = 1:5, z = 12)
p <- ggplot(d, aes(x=x, y = z)) + geom_point()
labels.list <- list('x' = 'X (ms)', 'z' = 'Hello something')
p + xlab(labels.list[[as.character(p$mapping$x)]]) +
ylab(labels.list[[as.character(p$mapping$y)]])
您可以将其写入函数
label_nice <- function(ggplotobj, lookup) {
.stuff <- lapply(ggplotobj$mapping, as.character)
nice <- setNames(lookup[unlist(.stuff)], names(.stuff))
labs(nice)
}
# this will give you the same plot as above
p + label_nice(p, labels.list)