Подтвердить что ты не робот

Как не показывать все метки на оси ggplot?

Я пытаюсь использовать ggplot2 для построения этого: введите описание изображения здесь Но как вы можете видеть по оси x, вы ничего не можете прочитать...

Итак, как я могу показать по оси x значение каждые 10 лет, например?

Это моя команда:

ggplot(prova, aes(x=year, y=mass..g.)) + geom_line(aes(group = 1))

4b9b3361

Ответ 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")))