2014-07-17 13 views
10

że ma następujące dane: [przykład z graficznym R Cookbook]przejrzystości ggplot R - warunkowe wartości alfa na inną zmienną

Cultivar Date Weight sd   n se   big 
c39  d16 3.18 0.9566144 10 0.30250803 TRUE 
c39  d20 2.8 0.2788867 10 0.08819171 TRUE 
c39  d21 2.74 0.9834181 10 0.3109841 TRUE 
c52  d16 2.26 0.4452215 10 0.14079141 FALSE 
c52  d20 3.11 0.7908505 10 0.25008887 TRUE 
c52  d21 1.47 0.2110819 10 0.06674995 FALSE 

ja, jaki ma być wykres bar przejrzystością paska pomiarowego zależy big zmiennej.

Próbowałem następujące, gdzie starałem się ustawić alpha wartości w zależności od różnych wartości big:

ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) + 
    geom_bar(position="dodge", stat="identity") 
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) + 
    geom_bar(position="dodge", stat="identity", alpha=cabbage_exp$big=c("TRUE"= 0.9, "FALSE" = 0.35)) 
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) + 
geom_bar(position="dodge", stat="identity", alpha=big=c("TRUE"= 0.9, "FALSE" = 0.35)) 

chciałbym mieć inny przejrzystości w barach, w zależności od wartości zmiennej duży. Każda pomoc lub wskazówki ogromnie docenione!

Odpowiedz

19

Inną możliwością korzystania scale_alpha_discrete, gdzie range argumentem może być używany do ustawiania żądanych alpha wartości dla każdego poziomu „big ".

ggplot(data = cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar, alpha = big)) + 
    geom_bar(position = "dodge", stat = "identity") + 
    scale_alpha_discrete(range = c(0.35, 0.9)) 

enter image description here

+1

myślę, że jest to lepsze rozwiązanie, przynajmniej nie jest poprawna legenda i nie ma potrzeby, aby obliczyć wartości alfa wcześniej. – juba

+0

Czy w przypadku zmiennej ciągłej o wartości 0 można podać gradient zamiast zakresu? więc coś w stylu 'c (0.9, 0.3, 0.9)' – posdef

7

Problem polega na tym, że zmienna jest dyskretna, natomiast skala alpha jest ciągła. Jednym ze sposobów, aby to zrobić jest ręcznie obliczyć swoje wartości alfa przed wydrukiem:

alpha <- ifelse(d$big, 0.9, 0.35) 
ggplot(d, aes(x=Date, y=Weight, fill=Cultivar)) + 
    geom_bar(position="dodge", stat="identity", aes(alpha=alpha)) 

Minusem jest to, że nie dostaniesz poprawnej legendę dla swoich wartości alfa. Można usunąć go z tego:

ggplot(d, aes(x=Date, y=Weight, fill=Cultivar)) + 
    geom_bar(position="dodge", stat="identity", aes(alpha=big)) + 
    scale_alpha_continuous(guide=FALSE) 

Wynik końcowy:

enter image description here

Powiązane problemy