ggplot usunięcia wybranych etykiet oś X

głosy
0
library(tidyverse)

df <- data.frame(date = as.Date(c(2017-12-01, 2018-01-01, 2018-02-01, 
                                  2018-03-01, 2018-04-01, 2018-05-01, 
                                  2018-06-01, 2018-07-01, 2018-08-01, 
                                  2018-09-01, 2018-10-01, 2018-11-01)), 
                 value = c(0.567859562, 0.514907158, 0.035399304, 0.485728823, 
                           0.925127361, 0.237531067, 0.301930968, 0.133373326, 
                           0.082275426, 0.464255614, 0.2366749, 0.652084264))

ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(date_breaks = 1 month, 
                 date_labels = %b) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

Chcę utrzymać moja działka poniżej, dokładnie tak, jak jest, z dwoma wyjątkami. Chcę usunąć pierwszy Novna etykiecie osi x, a ostatni Decna etykiecie osi x. I dodaje coord_cartesian(xlim = as.Date(c(2017-12-01, 2018-11-01)))do mojego kodu fragmencie powyżej, ale to eliminuje „puste miejsce” wyściółkę na obu końcach moim osi x.

Jak mogę po prostu powiedzieć ggplot aby usunąć tekst z pierwszych i ostatnich etykiet osi x? Byłby to pierwszy Novi ostatni Dec. Zauważ, że to nie istnieje w moim dframki danych w ogóle więc dplyrfiltry prawdopodobnie nie będzie działać.

wprowadzić

Utwórz 19/12/2018 o 14:15
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
2

Można osiągnąć to, co chcesz przez ustawienie przerw pomocą seq.date:

library(tidyverse);library(lubridate)

df <- data.frame(date = as.Date(c("2017-12-01", "2018-01-01", "2018-02-01", 
                                  "2018-03-01", "2018-04-01", "2018-05-01", 
                                  "2018-06-01", "2018-07-01", "2018-08-01", 
                                  "2018-09-01", "2018-10-01", "2018-11-01")), 
                 value = c(0.567859562, 0.514907158, 0.035399304, 0.485728823, 
                           0.925127361, 0.237531067, 0.301930968, 0.133373326, 
                           0.082275426, 0.464255614, 0.2366749, 0.652084264))



ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(
               date_labels = "%b",
               breaks = seq.Date(ymd("2017-12-01"),ymd("2018-11-01"), by = "month")) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

wprowadzić opis obrazu tutaj

Odpowiedział 19/12/2018 o 14:29
źródło użytkownik

głosy
1

Myślę, że to, co chcesz. date_breaksSą niepotrzebne.

ggplot(df, aes(date, value)) + 
  geom_col() + 
  scale_x_date(date_labels = "%b", breaks = df$date) + 
  theme(axis.text.x = element_text(angle = 90, vjust = 0.3))

Powstały działka

Odpowiedział 19/12/2018 o 14:36
źródło użytkownik

głosy
0

Proponuję badania pakiet Lubridate w R - byłbyś w stanie konwertować bałagan wartości dat w approrpiate formacie POSIXT a także może wydobyć informacje miesiąc naprawdę łatwo - można również konwertować te daty w jednej kolumnie rzeczywistych miesięcy i wykorzystanie że jako etykiety osi, która jest czystsze, jak można mieć dodatkową kolumnę tylko analogicznym miesiącu - można również wypełnić na podstawie tego miesiąca i zrobić kilka innych fajnych rzeczy!

Odpowiedział 19/12/2018 o 14:25
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more