2011-01-10 3 views
10

na wykresie gęstości ggplot2 (geom_density) I mają następujące oś y etykietggplot2 transformacji przez stały współczynnik

  • 0,000
  • 0,005
  • 0,010
  • 0,015
  • 0,020

Jaki jest właściwy sposób zmiany ich na coś podobnego do

ewentualnie automatyczne dodawanie "10^3 x Gęstość" etykiety. W przeszłości właśnie pomnożyłem dane i ręcznie zmieniłem etykietę, ale w tym przypadku dane osi y są generowane dla mnie przez wykres gęstości.

Jestem świadomy, że mogę pisać rzeczy takie jak scale_y_continuous(trans="log10"), ale nie znalazłem żadnego sposobu na zrobienie prostej stałej multiplikatywnej lub zdefiniowanie niestandardowej transformacji.

Odpowiedz

12

Można dodać scale_y_continuous(formatter='formatter1000') z następujących funkcji zdefiniowane wcześniej:

formatter1000 <- function(x){ 
    x*1000 
} 

Należy pamiętać, że powyższa odpowiedź dano półtora roku temu z wcześniejszej wersji ggplot. W najnowszym wydaniu (0.9) ggplot powyższy przykład nie działa, spróbuj coś takiego: scale_y_continuous(labels = formatter1000)

+0

To jest idealne. Czy natknąłeś się na jakąkolwiek dobrą dokumentację na temat formaterów? – Pengin

+0

@Pengin: Niestety nie. W ggplot jest kilka sformatowanych formaterów, na przykład: przecinek, nauka, procent, dolar, ale możesz pisać cokolwiek z prostymi funkcjami jak wyżej. – daroczig

+1

To w zasadzie wszystko, co jest, zbyt, ale w następnej wersji zostaną podzielone na własne pakiety, mam nadzieję, że z nieco większą ilością dokumentacji. – hadley

20

Ta odpowiedź jest nieaktualna dla wersji ggplot2 0.90. Teraz ten sam format powinien być określony (o wiele bardziej starannie) w ten sposób:

scale_y_continuous(labels=function(x)x*1000) 

lub jeśli chcesz używać tego samego systemu etykietowania wielokrotnie:

formatter1000 <- function(){ 
    function(x)x*1000 
} 

scale_y_continuous(labels=formatter1000()) 

Zauważ, że jeśli są określającą oś ograniczenia przy użyciu funkcji xlim i ylim, to może nie działać. Zamiast tego użyj specyfikacji scale_y_continuous(..., limits=c(0, 1)).

Istnieje również kilka wbudowanych formatów w pakiecie scales, w tym formatowanie przecinka, formatowanie procentowe, formatowanie dolara i formatowanie notacji naukowej. Zobacz jego numer documentation, aby uzyskać więcej informacji.

Mam nadzieję, że ktoś pomaga, ponieważ ta zmiana z pewnością mnie zdezorientowała!

+0

Dzięki. Dokumentacja pakietu wagowego to tylko szczegóły. To, co robi pakiet skal, dostarcza dużej liczby funkcji formatujących, takich jak "formatter1000" w tym poście, i do wyboru jednego z nich odgadujesz, co robi z nazwy swojej funkcji. –