2013-10-02 2 views
1

У меня есть функция построения графиков:Перекрытия альфа и размера в ggplot2

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) 

Теперь я хотел бы использовать его возвращение с небольшими изменениями. Скажем, чтобы изменить цвета я использую

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

Однако, когда не используя тот же подход к размеру и альфа, ни одна из этих работ:

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

и у меня всегда есть первая картина без изменений.
Насколько я могу судить, это происходит, когда эстетика, о которой идет речь, не отображается на переменную. Но я не знаю, почему это ожидаемое поведение, поэтому любые объяснения и переопределения обходных путей приветствуются. Благодаря!

ответ

2

Может быть, вы можете добавить размер и альфа в качестве аргументов, как это:

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) 
0

Так что в вашей функции вы устанавливаете альфу и размер, поэтому это не эстетика. A с эстетикой вы сопоставляете визуальный элемент, такой как размер или прозрачность с переменной, - и со шкалой, которую вы описываете, как вы ее сопоставляете (например, с низким уровнем переменной до зеленого и высокого уровня до красного).

Если вы установили визуальный элемент в какое-то качество, например, вы устанавливаете значение pointize равным 5, тогда масштаб больше не имеет смысла (потому что больше нет отображения, которое вы можете распознать по шкале - вы просто устанавливаете ВСЕ указывает на размер 5), потому что ваш pointize напрямую установлен на пять без какого-либо отношения к переменной.

Это не зависит от функции, которую вы написали, вы можете напрямую использовать последние две шкалы на объекте ggplot, который вы используете внутри функции - эффекта не будет.

+0

Спасибо за разъяснение. Как я могу переопределить эти «статические» размеры и альфа из моего примера? Мне все еще неясно, если это возможно. – tonytonov

Смежные вопросы