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

时间:2012-11-09 05:12:38

标签: r ggplot2

我正在处理一个数据集,其中我有一些变量,我一直在使用特定的命名约定来自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轴。

1 个答案:

答案 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)]])

enter image description here

您可以将其写入函数

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)