Używam R i ggplot, aby narysować wykres rozrzutu niektórych danych, wszystko jest w porządku, z wyjątkiem tego, że liczby na osi y wychodzą z formatowaniem wykładników w stylu komputerowym, tj. 4e + 05, 5e + 05 itd. To jest oczywiście niedopuszczalne, więc chcę wyświetlić je jako 500 000, 400 000 i tak dalej. Dopuszczalne byłoby również uzyskanie prawidłowego zapisu potęgowego.
Kod działki jest następujący:
p <- ggplot(valids, aes(x=Test, y=Values)) +
geom_point(position="jitter") +
facet_grid(. ~ Facet) +
scale_y_continuous(name="Fluorescent intensity/arbitrary units") +
scale_x_discrete(name="Test repeat") +
stat_summary(fun.ymin=median, fun.ymax=median, fun.y=median, geom="crossbar")
Każda pomoc bardzo doceniona.
ggplot
opcji domyślnych jako „oczywiście niedopuszczalnych”. Masz na myśli osobiste preferencje dotyczące innego formatu. Liczba w formacie4e+05
to notacja naukowa i byłaby preferowanym formatowaniem w wielu różnych zastosowaniach.Odpowiedzi:
Inną opcją jest formatowanie etykiet znaczników osi za pomocą przecinków przy użyciu pakietu
scales
i dodawaniedo instrukcji ggplot.
Jeśli nie chcesz ładować paczki, użyj:
źródło
Znalazłem również inny sposób zrobienia tego, który daje prawidłową notację „x10 (indeks górny) 5” na osiach. Publikuję go tutaj w nadziei, że może być przydatny dla niektórych. Dostałem stąd kod , więc nie rości sobie za niego uznania, słusznie trafia do Briana Diggsa.
Które możesz następnie użyć jako
źródło
format(...)
wiersz poniżej wiersza:l <- gsub("0e\\+00","0",l)
gsub()
bezpośrednio poformat()
, testując, coformat()
zwraca się dla twojej sprawy w osobnej konsoli.gsub
poleceniem:# remove + after exponent, if exists. E.g.: (3x10^+2 -> 3x10^2)
l <- gsub("e\\+","e",l)
a po nim:# convert 1x10^ or 1.000x10^ -> 10^
l <- gsub("\\'1[\\.0]*\\'\\%\\*\\%", "", l)
aby było to w formacie zwykle używanym w artykułach.źródło
library(scales)
i używać,comma
który powinien działać lepiej niż funkcja, którą miałem wcześniej.Spóźniłem się na grę, ale na wypadek, gdyby inni chcieli łatwego rozwiązania, stworzyłem zestaw funkcji, które można nazwać:
które dają czytelne dla człowieka liczby dla osi x lub y (lub ogólnie dowolną liczbę).
Możesz znaleźć funkcje tutaj: Github Repo Po prostu skopiuj funkcje do swojego skryptu, aby móc je wywołać.
źródło
Uważam, że sugerowana odpowiedź Jacka Aidleya jest użyteczna.
Chciałem wyrzucić inną opcję. Załóżmy, że masz szereg z wieloma małymi liczbami i chcesz mieć pewność, że etykiety osi zapisują pełny punkt dziesiętny (np. 5e-05 -> 0,0005), a następnie:
źródło
scale_y_continuous(labels=function(n){format(n, scientific = FALSE)})
dlaczego nie ma takiego predefiniowanego programu formatującego, do diabła.