我正在使用一个数据集,我有一些变量,我一直在使用具有特定命名约定的CSV文件.所以例如我会有类似的东西:
p <- ggplot(plot_df, aes(x=ms, y=bandwidth)) + geom_line()
Run Code Online (Sandbox Code Playgroud)
默认情况下,图表的x和y标题分别为'ms'和'bandwidth'.我希望能够做的是定义一个具有这些映射列表的函数,如:
"bandwidth"->"Bandwidth (GB/s)"
"ms"->"Time (ms)"
Run Code Online (Sandbox Code Playgroud)
所以我可以提供p一个基本上执行的函数:
p + xlab("Time (ms)") + ylab("Bandwidth GB/s")
Run Code Online (Sandbox Code Playgroud)
自动,我不必继续指定标签应该是什么.为了做到这一点,我需要以某种方式访问x和y标题作为字符串.我很难搞清楚如何从中获取这些信息p.
编辑:我猜通常y轴由于熔化而出现'值',但为了论证,我们只是说我现在正在做x轴.
它们存放在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)]])
Run Code Online (Sandbox Code Playgroud)

你可以把它写成一个函数
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)
Run Code Online (Sandbox Code Playgroud)