Как не показывать все метки на оси ggplot?
Я пытаюсь использовать ggplot2
для построения этого:
Но как вы можете видеть по оси x, вы ничего не можете прочитать...
Итак, как я могу показать по оси x значение каждые 10 лет, например?
Это моя команда:
ggplot(prova, aes(x=year, y=mass..g.)) + geom_line(aes(group = 1))
Ответы
Ответ 1
Является ли ваш столбец year
числовым? Вы можете добавить scale_x_continuous
с аргументом breaks
, чтобы указать, где должны быть отметки оси x. Я не могу сказать, какой диапазон лет на изображении, но если он с 1900 по 2000 год (например, вы можете сделать что-то вроде этого:
ggplot(prova, aes(x=year, y=mass..g.)) +
geom_line(aes(group=1)) +
scale_x_continuous(breaks=seq(1900, 2000, 10))
Ответ 2
Поддельные данные:
df = data.frame(year = as.factor(1800:2000),
variable = rnorm(length(1800:2000)))
Ваш сюжет с поддельными данными:
ggplot(df, aes(x = year, y = variable, group = 1)) +
geom_line()
Проблема в том, что ваша переменная year является factor
(или, может быть, строкой?), поэтому она интерпретируется как категоричная. Вы можете работать в этой структуре:
ggplot(df, aes(x = year, y = variable, group = 1)) +
geom_line() +
scale_x_discrete(breaks = levels(df$year)[c(T, rep(F, 9))])
Или, что еще лучше, вы можете преобразовать его в числовое, и все будет работать автоматически:
df$real_year = as.numeric(as.character(df$year))
ggplot(df, aes(x = real_year, y = variable)) +
geom_line()
Обратите внимание, что это, делая это "правильно", вам не нужно беспокоиться о group = 1
или испортить масштаб. ggplot вознаграждает вас за ваши данные в правильном формате: исправьте свои данные, и вам не придется исправлять ваш сюжет. Если вы хотите, чтобы метки были ровно через каждые 10 лет, вы можете использовать scale_x_continuous
, как было предложено пользователем2034412, но по умолчанию он будет хорошо догадываться о "хороших" разрывах в оси.
Если ваша ось x является фактической датой или датой, что-то вроде 1984-10-31
, тогда вы должны преобразовать ее в объект Date
(или, возможно, объект POSIX
, если у него есть время), и снова ggplot
будет знать, как правильно обращаться с ним. См. ?strftime
(базовая функция) или пакет lubridate
для конверсий в соответствующие классы дат.
Ответ 3
Другие ответы охватывают случай, когда ваши даты являются числовыми годами, но если (как отмечает @Gregor) ваши даты являются актуальными объектами Date
, это намного проще:
scale_x_date(name = 'My date axis title', date_breaks = '20 years',
date_labels = '%Y')
С scale_date
вы можете управлять перерывами с интуитивно понятным языком и маркировкой с помощью (надеюсь) знакомых strptime
нотация.
Ответ 4
Если у вас слишком много данных, вы можете сделать следующее:
Поддельные данные:
df = data.frame(year = as.factor(1990:2000),variable =
rnorm(length(1990:2000)))
Нормальный график:
ggplot(df, aes(x = year, y = variable, group = 1)) + geom_line()
Участок со скрытыми метками:
ggplot(df, aes(x = year, y = variable, group = 1)) +
geom_line() + theme(axis.text.x=element_text(color=c("black","transparent","transparent","transparent","black","transparent","transparent","transparent","transparent","transparent","black")))