1

I have a plotting function:

drawFoo <- function(df) {
  ggplot(data=df, aes(x=x, y=y, colour=c)) + 
  geom_point(alpha=1, size=5)
}
bar <- data.frame(x=1:10, y=10:1, c=as.factor(rbinom(10, 1, 0.5)))
drawFoo(bar)

Now I'd like to use its return with slight adjustments. Say, to change colours I use

drawFoo(bar) + scale_colour_manual(values = 1:2)

However, when using the same approach to size and alpha, none of these work:

drawFoo(bar) + scale_size_manual(values = 1:10)
drawFoo(bar) + scale_alpha_manual(values = rep(1/10, 10))

and I always have the first picture unaffected.
As far as I can tell, that happens when the aesthetic in question is not mapped to a variable. But I have no idea why this is an expected behaviour, so any explanations and overriding workarounds are welcome. Thanks!

4

2 回答 2

2

也许您可以像这样添加 size 和 alpha 作为参数:

drawFoo <- function(df,alpha=1,size=5) {
    ggplot(data=df, aes(x=x, y=y, colour=c)) + 
    geom_point(alpha=alpha, size=size)
}

所以你有 1 和 5 作为默认值,但可以在使用你的函数时更改它们。

drawFoo(df) ## alpha=1, size=5
drawFoo(df,alpha=0.5,size=2) 
于 2013-10-02T09:00:37.710 回答
0

所以在你的函数中你设置了 alpha 和大小,所以它不是美学。通过美学,您将视觉元素(如大小或透明度)映射到变量 - 并使用比例描述您如何映射它(例如,变量的低级别为绿色,高级别为红色)。

如果您将视觉元素设置为某种质量,例如,您将点大小设置为 5,则比例不再有意义(因为不再有可以用比例描述的映射 - 您只需设置所有点即可size 5),因为您的 pointsize 直接设置为 5,与变量没有任何关系。

它不依赖于您编写的函数,您可以直接在函数内部使用的 ggplot 对象上使用后两个刻度 - 不会有任何效果。

于 2013-10-02T08:41:52.767 回答