在ggplot2中添加动态x和y标题

Kar*_*ine 0 r ggplot2

我正在使用一个数据集,我有一些变量,我一直在使用具有特定命名约定的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轴.

mne*_*nel 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)]])
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)