Ограничивающая ось для ggplot

Я пытаюсь построить свой брак с набором данных, который состоит из штата, года и скорости. Однако я стараюсь сосредоточиться на конкретных интервалах года, чтобы график выглядел менее перегруженным.

marriage<-read.csv(file="~/Desktop/datah.csv", header=T, sep=",",check.names=FALSE)
marriage
marriage <- marriage %>%
     gather(key=year, value=rate, `2017`:`1990`)
ggplot(marriage, aes(x=year, y=rate, group=State)) +
     geom_point(aes(color=State)) +
     geom_line(aes(color=State)) +
     theme_bw()

Я попытался добавить следующее, чтобы попытаться ограничить оси x и y последней строкой кода выше.

+ylim(0,2)
+scale_x_continuous(limits=c(2000, 2005))
+xlim(2010, 2015)
+scale_x_continous(breaks = seq(2000, 2005, 5))

Но я получаю это, ошибка: дискретное значение передается в непрерывную шкалу

Я также попытался превратить его в числовой

marriage$variable=as.numeric(levels(marriage$variable))[marriage$variable]

Я получаю следующую ошибку Ошибка в $‹-.data.frame(tmp, variable, value = numeric(0)) : замена имеет 0 строк, данные имеют 1071

Вот первые несколько строк данных

                  State 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1999 1995 1990
1               Alabama  7.0  7.1  7.4  7.8  7.8  8.2  8.4  8.2  8.3  8.6  8.9  9.2  9.2  9.4  9.6  9.9  9.4 10.1 10.8  9.8 10.6
2                Alaska  6.9  7.1  7.4  7.5  7.3  7.2  7.8  8.0  7.8  8.4  8.5  8.2  8.2  8.5  8.1  8.3  8.1  8.9  8.6  9.0 10.2
3               Arizona  5.8  5.9  5.9  5.8  5.4  5.6  5.7  5.9  5.6  6.0  6.4  6.5  6.6  6.7  6.5  6.7  7.6  7.5  8.2  8.8 10.0
4              Arkansas  9.5  9.9 10.0 10.1  9.8 10.9 10.4 10.8 10.7 10.6 12.0 12.4 12.9 13.4 13.4 14.3 14.3 15.4 14.8 14.4 15.3
5           California   6.3  6.5  6.2  6.4  6.5  6.0  5.8  5.8  5.8  6.7  6.2  6.3  6.4  6.4  6.1  6.2  6.5  5.8  6.4  6.3  7.9
6              Colorado  7.3  7.4  6.8  7.1  6.5  6.8  7.0  6.9  6.9  7.4  7.1  7.2  7.6  7.4  7.8    8  8.2  8.3  8.2  9.0  9.8
7           Connecticut  5.6  5.6  5.3  5.4    5  5.2  5.5  5.6  5.9  5.4  5.5  5.5  5.8  5.8  5.5  5.7  5.4  5.7  5.8  6.6  7.9
8              Delaware  5.5  5.6  5.7    6  6.6  5.8  5.2  5.2  5.4  5.5  5.7  5.9  5.9  6.1    6  6.4  6.5  6.5  6.7  7.3  8.4
9  District of Columbia  8.2  8.1  8.2 11.8 10.8  8.4  8.7  7.6  4.7  4.1  4.2    4  4.1  5.2  5.1  5.1  6.2  4.9  6.6  6.1  8.2
10              Florida  7.8  8.1  8.2  7.3    7  7.2  7.4  7.3  7.5  8.0  8.5  8.6  8.9  9.0    9  9.4  9.3  8.9  8.7  9.9 10.9
11              Georgia  6.9  6.8  6.2  ---  ---  6.5  6.6  7.3  6.6  6.0  6.8  7.3  7.0  7.9    7  6.5  6.1  6.8  7.8  8.4 10.3
12               Hawaii 15.3 15.6 15.9 17.7 16.3 17.5 17.6 17.6 17.2 19.1 20.8 21.9 22.6 22.6   22 20.8 19.6 20.6 18.9 15.7 16.4
13                Idaho  7.8  8.1  8.2  8.4  8.2  8.2  8.6  8.8  8.9  9.5 10.0 10.1 10.5 10.8 10.9   11 11.2 10.8 12.1 13.1 13.9

person subrinarafiq    schedule 12.11.2019    source источник
comment
Похоже, ваш столбец year, вероятно, категоричен после того, как вы gather(). В этом может помочь аргумент convert в gather().   -  person aosmith    schedule 13.11.2019
comment
@MatthewR Я посмотрел на эту ссылку, попытался реализовать ее и получил эту ошибку. marriage$variable=as.numeric(levels(marriage$variable))[marriage$variable] Ошибка в $‹-.data.frame(tmp, variable, value = numeric(0)) : замена имеет 0 строк, данные имеют 1071 –   -  person subrinarafiq    schedule 13.11.2019
comment
Для людей, которые помогут вам интерпретировать сообщения об ошибках помимо догадок, воспроизводимый пример будет необходимо   -  person camille    schedule 13.11.2019
comment
Я считаю, что этот вопрос действительно касается чтения в файле, а не ggplot2. Я думаю, что симптом сюжета, но проблема заключается в вводе файла. Попробуйте na.strings = "---" в пределах read.csv().   -  person Adam    schedule 13.11.2019


Ответы (3)


Пытаться

scale_x_continous(breaks = seq(2000, 2015, 5)

Извините, не могу комментировать, недостаточно представителей

person Hansel Palencia    schedule 12.11.2019
comment
Я знаю, что вы не можете комментировать, но все равно выводится та же ошибка Ошибка: дискретное значение предоставлено для непрерывной шкалы - person subrinarafiq; 13.11.2019

Переменная «год» хранится как символ после gather. Вы можете изменить форму (обновление до pivot_longer):

    marriage <-
      marriage %>%
      pivot_longer(
        cols = `2017`:`1990`,
        names_to = 'year',
        values_to = 'rate'
      ) %>%
      mutate(
        year = as.numeric(year)
      )

Вызовы ggplot должны выполняться оттуда.

person AHart    schedule 13.11.2019
comment
Я получаю эту ошибку, когда пытаюсь запустить это, Ошибка брака %›% pivot_longer(cols = 2017:1990, names_to = year, : не удалось найти функцию %›% - person subrinarafiq; 13.11.2019
comment
Оператор трубы %>% из magrittr, часть tidyverse - person AHart; 13.11.2019
comment
Теперь я установил правильный пакет, но получаю следующую ошибку: Нет общего типа для 2017 ‹double› и 2014 ‹factor‹31e4f››. Позвоните rlang::last_error(), чтобы увидеть обратную трассировку. - person subrinarafiq; 14.11.2019

Я думаю, что ggplot() на самом деле будет делать достойную работу, автоматически используя приличные интервалы. Если вы хотите, чтобы он делал свое дело, попробуйте преобразовать годы в даты. Проще всего это сделать с помощью make_date() из lubridate.

библиотеки

library(dplyr)
library(tidyr)
library(lubridate)
library(ggplot2)

считывать данные (редактировать в зависимости от обновления вопроса)

Вот данные, основанные на редактировании. Это должно привести к тому, что у вас было. Обратите внимание, что я явно использую другой подход, чем вы.

Я думаю, вам нужно будет добавить na.strings = "---", как это сделал я, чтобы поля NA читались правильно.

Кроме того, мне пришлось добавить округ Колумбия в одинарные кавычки. Возможно, это проблема, с которой вы столкнулись.

data <- "State 2017 2016 2015 2014 2013 2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000 1999 1995 1990
Alabama  7.0  7.1  7.4  7.8  7.8  8.2  8.4  8.2  8.3  8.6  8.9  9.2  9.2  9.4  9.6  9.9  9.4 10.1 10.8  9.8 10.6
Alaska  6.9  7.1  7.4  7.5  7.3  7.2  7.8  8.0  7.8  8.4  8.5  8.2  8.2  8.5  8.1  8.3  8.1  8.9  8.6  9.0 10.2
Arizona  5.8  5.9  5.9  5.8  5.4  5.6  5.7  5.9  5.6  6.0  6.4  6.5  6.6  6.7  6.5  6.7  7.6  7.5  8.2  8.8 10.0
Arkansas  9.5  9.9 10.0 10.1  9.8 10.9 10.4 10.8 10.7 10.6 12.0 12.4 12.9 13.4 13.4 14.3 14.3 15.4 14.8 14.4 15.3
California   6.3  6.5  6.2  6.4  6.5  6.0  5.8  5.8  5.8  6.7  6.2  6.3  6.4  6.4  6.1  6.2  6.5  5.8  6.4  6.3  7.9
Colorado  7.3  7.4  6.8  7.1  6.5  6.8  7.0  6.9  6.9  7.4  7.1  7.2  7.6  7.4  7.8    8  8.2  8.3  8.2  9.0  9.8
Connecticut  5.6  5.6  5.3  5.4    5  5.2  5.5  5.6  5.9  5.4  5.5  5.5  5.8  5.8  5.5  5.7  5.4  5.7  5.8  6.6  7.9
Delaware  5.5  5.6  5.7    6  6.6  5.8  5.2  5.2  5.4  5.5  5.7  5.9  5.9  6.1    6  6.4  6.5  6.5  6.7  7.3  8.4
'District of Columbia'  8.2  8.1  8.2 11.8 10.8  8.4  8.7  7.6  4.7  4.1  4.2    4  4.1  5.2  5.1  5.1  6.2  4.9  6.6  6.1  8.2
Florida  7.8  8.1  8.2  7.3    7  7.2  7.4  7.3  7.5  8.0  8.5  8.6  8.9  9.0    9  9.4  9.3  8.9  8.7  9.9 10.9
Georgia  6.9  6.8  6.2  ---  ---  6.5  6.6  7.3  6.6  6.0  6.8  7.3  7.0  7.9    7  6.5  6.1  6.8  7.8  8.4 10.3
Hawaii 15.3 15.6 15.9 17.7 16.3 17.5 17.6 17.6 17.2 19.1 20.8 21.9 22.6 22.6   22 20.8 19.6 20.6 18.9 15.7 16.4
Idaho  7.8  8.1  8.2  8.4  8.2  8.2  8.6  8.8  8.9  9.5 10.0 10.1 10.5 10.8 10.9   11 11.2 10.8 12.1 13.1 13.9"

marriage <- read.table(textConnection(data), header = TRUE, na.strings = "---") %>%
  as_tibble() %>%
  rename_all(~ sub("X", "", .))

На этом этапе marriage должны быть вашими данными. Я сделаю небольшую модификацию, чтобы преобразовать в дату.

marriage <- marriage %>%
  gather(key=year, value=rate, `2017`:`1990`)%>%
  mutate(year = make_date(year))

сюжет

Никаких изменений в вашем коде графика. Ось естественно была обработана.

ggplot(marriage, aes(x=year, y=rate, group=State)) +
  geom_point(aes(color=State)) +
  geom_line(aes(color=State)) +
  theme_bw()

вывод графика

person Adam    schedule 13.11.2019
comment
Получение следующей ошибки: Ошибка в is_string(x): объект «2017» не найден - person subrinarafiq; 13.11.2019
comment
Я обновил исходный вопрос, чтобы отразить первые несколько строк набора данных, у меня был столбец под годом, но это привело бы к неправильному чтению файла R, поэтому мне пришлось полностью избавиться от него из моего CSV-файла. . У меня есть ряд лет и столбец штатов. - person subrinarafiq; 13.11.2019
comment
Набор данных, очевидно, относится ко всем 51 штату, поэтому я добавил еще несколько штатов, чтобы вы могли следить за следующей проблемой. Когда я запускаю вашу команду после того, как вы определяете данные, я продолжаю получать сообщение об ошибке «Ошибка сканирования» (файл = файл, что = что, sep = sep, цитата = цитата, dec = dec,: в строке 9 не было 22 элементов. Строка 9 действительно имеет значения 22. Грузия - единственное состояние, в котором отсутствуют значения, и даже когда я произвольно ввожу значения, я все равно получаю сообщение об ошибке. Любые идеи о том, что вызывает это? - person subrinarafiq; 13.11.2019
comment
Когда я добавляю больше состояний, ось Y начинает выглядеть перегруженной. Итак, я проделал это с 30 штатами, и по оси Y перечислены все значения коэффициента брачности штатов за 21 год. Поэтому я думаю, что мне все еще нужно найти способ ограничить мою ось или, по крайней мере, изменить масштабы. - person subrinarafiq; 14.11.2019
comment
Это связано с типами данных. Он все еще думает, что эти вещи категоричны. Вам нужно преобразовать x в дату и убедиться, что y является числом. - person Adam; 14.11.2019