Fałszywe dane:
df = data.frame(year = as.factor(1800:2000),
variable = rnorm(length(1800:2000)))
Twój Działka z fałszywymi danymi:
ggplot(df, aes(x = year, y = variable, group = 1)) +
geom_line()
problemem jest to, że zmienna roku jest factor
(albo łańcuch?), więc jest to interpretowane jako kategoryczne. Można pracować w tym kontekście:
ggplot(df, aes(x = year, y = variable, group = 1)) +
geom_line() +
scale_x_discrete(breaks = levels(df$year)[c(T, rep(F, 9))])
Albo, jeszcze lepiej, można przekonwertować go na numeryczne i wszystko działa automatycznie:
df$real_year = as.numeric(as.character(df$year))
ggplot(df, aes(x = real_year, y = variable)) +
geom_line()
Uwaga, to robi to „właściwy sposób”, to nie musisz się martwić group = 1
lub bałagan ze skalą. ggplot nagradza twoje dane we właściwym formacie: napraw swoje dane i nie będziesz musiał naprawiać fabuły. Jeśli chcesz mieć pewność, że etykiety są dokładnie co 10 lat, możesz użyć scale_x_continuous
zgodnie z sugestią użytkownika 2034412, ale domyślnie będzie dobrze odgadnąć "ładne" przerwy w osi.
Jeśli oś x jest faktyczna data lub datetime, coś 1984-10-31
następnie należy przekonwertować go na Date
obiektu (a może POSIX
obiektu, jeśli ma czas, jak również), i znowu ggplot
będzie wtedy wiedzieć, jak odpowiednio go obsłużyć. Zobacz ?strftime
(funkcja podstawowa) lub pakiet lubridate
dla konwersji na odpowiednie klasy dat.