2012-09-01 21 views
7

Korzystanie ggplot wykreślić proporcjonalnych symbole powierzchnia wydaje się wymagać korzystania sqrt() osiągnąć prawdziwą proporcjonalność:Proporcjonalnie wielkości symboli ggplot

require(ggplot2) 

t <- data.frame(x=rep(c(1:5),5), y=rep(c(1:5),each=5), s=round(seq(1,100,length.out=25))) 
t 
p <- ggplot(data=t, aes(x=x,y=y)) 

# direct size-to-variable mapping 
p + geom_point(aes(size=s), pch=22, fill='#0000FF75', col=NA) + 
    scale_size(range = c(1, 40)) + 
    geom_text(data=t, aes(x=x,y=y,label=s),size=3,vjust=1) 

# proportional area size-to-variable mapping 
p + geom_point(aes(size=sqrt(s)), pch=22, fill='#0000FF75', col=NA) + 
    scale_size(range = c(1, 40)) + 
    geom_text(data=t, aes(x=x,y=y,label=s),size=3,vjust=1) 

enter image description here

Jak widać etykiety są zakorzenione kiedy potrzeba im pokaż oryginalne dane. Próbowałem grać z opcjami scale_size, ale nic nie działa. Ktoś wie na ten temat, czy może jest jakieś niejasne ustawienie, aby uzyskać mapowanie proporcjonalnego rozmiaru obszaru?

Z góry dziękuję.

Odpowiedz

7

Można użyć scale_area zamiast scale_size:

p + geom_point(aes(size=s), pch=22, fill='#0000FF75', col=NA) + 
    scale_area(range = c(1, 40)) + 
    geom_text(data=t, aes(x=x,y=y,label=s),size=3,vjust=1) 

enter image description here


Zgadzam się, że nie jest całkowicie oczywiste, ale nie że obsure albo - jest przykładem korzystania scale_area w pomocy dla ?scale_size.

+0

Dzięki @Andrie to rozwiązało. Zmieniłem tytuł tego pytania, aby odzwierciedlić rozwiązanie. – geotheory

+2

To jest teraz 'scale_size_area' jako' scale_area' jest przestarzałe. – geotheory