0

我正在使用一个数据集,其中有一些变量,我不断地用特定的命名约定从 CSV 文件中绘制这些变量。所以例如我会有类似的东西:

p <- ggplot(plot_df, aes(x=ms, y=bandwidth)) + geom_line()

默认情况下,图表的 x 和 y 标题将分别显示为“ms”和“带宽”。我想做的是定义一个具有这些映射列表的函数,例如:

"bandwidth"->"Bandwidth (GB/s)"
"ms"->"Time (ms)"

所以我可以提供p一个基本上会执行的函数:

p + xlab("Time (ms)") + ylab("Bandwidth GB/s")

自动,无需我一直指定标签应该是什么。为了做到这一点,我需要以某种方式访问​​ x 和 y 标题作为字符串。我很难弄清楚如何从p.

编辑:我猜通常 y 轴会因为融化而出现“值”,但为了论证,我们现在就说我正在做 x 轴。

4

1 回答 1

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)
于 2012-11-09T05:26:15.937 回答