2015-02-27 14 views
14

(aktualizacja) Mam ggplot tak, ale wtedy oś x Data skalowane:Dodaj tekst ggplot

g1 <- ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() 

Powyżej dwóch barów (pozwala sayVS2 i IF, ale w moim wykresie jest to data) Chcę umieścić etykietę tekstową nad taktami o wysokości 13 000.

próbowałem wiele rzeczy, ale to, co było najbliżej: To co próbowałem w moim wykresie z Datą oś G1 + geom_text (AES (as.Date („05.10.2014”) , 13000), label = "łódź")

ale to tylko dodaje jeden do wykresu i jak tylko próbuję go przedłużyć, na przykład z

g1 + geom_text(aes(c(as.Date("2014-10-05"),as.Date("2014-10-20")) , 13000), label=c("boat", "train")) 

następnie pojawia się błąd:

Error: Aesthetics must either be length one, or the same length as the dataProblems:c(as.Date("2014-10-05"), as.Date("2014-10-20"))

Próbowałem również do zapoznania się z tekstu i etykiet z dataframe (oefen), gdzie użyłem tych samych nazw jako oryginalny działki

g1 + geom_text(data=oefen, aes(x=newdat, y=Number, label=oefen$labs, fill=1)) 

pojawia się błąd

Error: Continuous value supplied to discrete scale

Próbowałem wiele innych rozwiązań , ale nie może znaleźć odpowiedzi. czego mi brakuje?

+1

Trudne do wykonania bez powtarzalnego przykładu. Jednak co z 'df <- data.frame (x = as.Date (c (" 2014-10-04 "," 2014-10-08 "," 2014-11-06 ")), y = próbka (1: 3, 3), etykieta = próbka (litery, 3)); ggplot (df, aes (x, y, label = label)) + geom_bar (stat = "identity") + geom_text (y = 4) + ylim (c (0, 4)) '? – lukeA

+0

Cześć, lukeA, dziękuję za odpowiedź. Twoje rozwiązanie jest bliskie, ale to, czego chcę, to tylko te litery (więc bez pasków), wykreślone na moim oryginalnym stosie słupków g1. Mam taki barplot: ggplot (diamenty, aes (klarowność, wypełnienie = cięcie)) + geom_bar(), ale xaxis jest zmienną Date. Powyżej tylko dwóch kresek chcę wykreślić list. Czy to jest jaśniejsze? – Rosanne

+0

@Rosanne prosimy o przesłanie prostego kodu odtwarzalnego przy użyciu zestawu danych diamentów. – smci

Odpowiedz

38

Rozważ skorzystanie z annotate(), aby umieścić dowolny tekst w wybranym miejscu na działce. Zmienne czynnikowe, podobnie jak w przypadku współczynnika jasności na osi X, mają liczbę dla każdego poziomu, więc można użyć tej liczby do zlokalizowania tekstu. Zakładam, zmienne pory ten sam wykorzystanie .:

ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() + 
    annotate("text", x=8, y=13000, label= "boat") + 
    annotate("text", x = 4, y=13000, label = "ship") 

enter image description here

EDIT po KOMENTARZ

Dla efektywności, można łączyć adnotacje, takie jak ten:

ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() + 
    annotate("text", x = c(2,4,6,8), y=13000, label = c("two", "ship", "six", "boat")) 
+0

Dziękuję bardzo, dokładnie tego właśnie szukałem. Próbowałem wcześniej użyć adnotacji, ale wtedy to nie działało, może było zbyt popsute. Zastanawiałem się, czy chcę dodać 6 etykiet, jeśli istnieje sposób na połączenie wszystkiego w jednym skrypcie, zamiast sześciokrotnego używania adnotacji? Tak czy inaczej, Ill po prostu odłożył to 6 razy, ponieważ w końcu działa. Dziękuję bardzo!! – Rosanne

+0

Dodałem sugerowaną technikę do wielu adnotacji w jednym wierszu. Jeśli to odpowie na twoje pytanie, rozważ zaakceptowanie tego. Dzięki – lawyeR

+0

Czy to była odpowiedź na twoje pytanie? – lawyeR

Powiązane problemy