默认情况下使用相同名称的美学与R中的ggplot?

时间:2016-05-24 02:28:09

标签: r ggplot2

有时候使用ggplot我发现自己使用数据框,其中变量名实际上与我想要使用的美学相对应。这导致代码如下:

rect <- data.frame(xmin=1,xmax=10,ymin=1,ymax=10)
ggplot(rect, aes(xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax))+geom_rect()

感觉有点WET

有没有办法避免这种重复?

3 个答案:

答案 0 :(得分:15)

aes_auto(),但显然已经弃用了。可替代地,

aes_all(names(rect))

答案 1 :(得分:6)

更新:请参阅@ baptiste的回答。这是(现已弃用)aes_auto()的75%功能。

@MrFlick对#spiffy解决方案的更多快捷方式 - { - 1}}特定替代方案:

data.frame

答案 2 :(得分:5)

如果真的出现了很多,你可以创建自己的帮助函数

aes_self <- function(...) {
    dots <- as.list(substitute(...()))
    names <- sapply(dots, paste)
    do.call("aes", setNames(dots, names))
}

ggplot(rect, aes_self(xmin, xmax, ymin, ymax))+geom_rect()

我还要添加一个,以便更容易混合固定的美学。在这里你可以使用“。”表示与参数同名的列:

aes_dotself <- function(...) {
    dots <- as.list(substitute(...()))
    self <- sapply(dots, function(x) x==as.name("."))
    if(any(self)) {
        dots[self] <- sapply(names(dots[self]), as.name)
    }
    do.call("aes", dots)
}

rect <- data.frame(xmin=1,xmax=10,ymin=1,ymax=10, type="type1")
ggplot(rect, aes_dotself(xmin=.,xmax=.,ymin=.,ymax=., fill=type))+geom_rect()