Создайте линейный график с несколькими линиями в R

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

В моем фрейме данных 1950-2010 годы (каждые 10 лет) в виде строк и гонки в виде столбцов. Данные в поперечном сечении представляют собой процент этой гонки в данном году.

Я хочу, чтобы мой линейный график отображал годы по оси x и гонки по оси y. Таким образом, с моими 5 переменными «расы» на одном графике будет 5 линий разных цветов.

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

Редактировать: я выполнил рефакторинг кода и построил свой собственный фрейм данных вместо того, чтобы возвращать матрицу.

Тем не менее, я хочу, чтобы с правой стороны было написано «Гонка», а затем были мои 5 строк. Я работаю над тем, чтобы одна строка отображалась вообще, прежде чем делать остальные 4.

новый фрейм данных возвращенный сюжет

Изменить: я до сих пор понял в своем коде - Allston <- ggplot(data = dataAllston, aes(Year, White.pct, group = 1)) + geom_point(aes(color = "orange")) + geom_line(aes(color = "orange"))

Я хочу масштабировать ось Y и от 0 до 1 с шагом 0,2, чтобы Y был «Гонкой» вместо отдельных меток. И больше, чем просто перемаркировка — я хочу, чтобы график отображал фактическое увеличение/уменьшение, а не прямую линию по диагонали вниз, как сейчас.

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

новый возвращенный сюжет

Редактировать:

dput(dataAllston)

возвращается

structure(list(Year = c(1950, 1960, 1970, 1980, 1990, 2000, 2010
), White.pct = structure(7:1, .Label = c("57.0", "59.0", "63.0", 
"78.0", "90.8", "98.0", "98.3"), class = "factor"), BlackOrAA.pct = 
structure(c(2L, 
1L, 3L, 4L, 5L, 4L, 4L), .Label = c("1.20", "1.30", "2.60", "5.00", 
"9.00"), class = "factor"), Hispanic.pct = structure(c(1L, 1L, 
3L, 4L, 2L, 2L, 2L), .Label = c("0.00", "13.0", "3.10", "6.00"
), class = "factor"), AsianOrPI.pct = structure(c(1L, 1L, 5L, 
6L, 2L, 3L, 4L), .Label = c("0.00", "14.0", "18.0", "20.0", "3.20", 
"9.00"), class = "factor"), Other.pct = structure(c(2L, 1L, 3L, 
4L, 5L, 4L, 4L), .Label = c("1.20", "1.30", "2.60", "5.00", "9.00"
), class = "factor")), class = "data.frame", row.names = c(NA, 

-7L))

результат из dput(data)


person tl124    schedule 05.04.2020    source источник
comment
предоставьте вывод для dput(dataAllston), мы не можем скопировать и вставить ваш набор данных и проверить в нашем сеансе, какой код будет работать. см.: stackoverflow. com/questions/5963269/   -  person dc37    schedule 05.04.2020


Ответы (1)


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

Поскольку ваши данные представлены в факторном формате (кроме столбца «Год»), первая строка преобразует их все в числовой формат, наиболее подходящий для построения графиков.

library(dplyr)
library(tidyr)

Reshaped_DF <- df %>% mutate_at(vars(ends_with(".pct")), ~as.numeric(as.character(.))) %>%
   pivot_longer(-Year, names_to = "Races", values_to = "values")

# A tibble: 35 x 3
    Year Races         values
   <dbl> <chr>          <dbl>
 1  1950 White.pct       98.3
 2  1950 BlackOrAA.pct    1.3
 3  1950 Hispanic.pct     0  
 4  1950 AsianOrPI.pct    0  
 5  1950 Other.pct        1.3
 6  1960 White.pct       98  
 7  1960 BlackOrAA.pct    1.2
 8  1960 Hispanic.pct     0  
 9  1960 AsianOrPI.pct    0  
10  1960 Other.pct        1.2
# … with 25 more rows

Затем вы можете построить его в ggplot2, выполнив:

library(ggplot2)

ggplot(Reshaped_DF,aes(x = Year, y = values, color = Races, group = Races))+
  geom_line()+
  geom_point()+
  ylab("Percentage")

введите здесь описание изображения Это ответ на ваш вопрос?

Если нет, рассмотрите возможность предоставления воспроизводимого примера вашего набора данных, который люди могут легко скопировать/вставить. См. это руководство: Как сделать отличный воспроизводимый пример R

person dc37    schedule 05.04.2020
comment
Я сделал именно это (конечно, переименовав df в свой dataFrame) и получил ошибку: Нет общего типа для Year ‹double› и White.pct ‹factor‹b7e32››. - person tl124; 05.04.2020
comment
Спасибо за вашу помощь - я не уверен, воспроизводим ли мой код, потому что мне пришлось вычислять отдельные значения. Вы имеете в виду, как создается мой фрейм данных до того, как я его рисую? - person tl124; 05.04.2020
comment
Спасибо, только что обновил - не видел вашего другого комментария. Я новичок в стеке, и я не привык прыгать, хахах. - person tl124; 05.04.2020
comment
Я не могу отблагодарить вас за ваше терпение ... весь этот форум, помимо кодирования, действительно требует обучения. - person tl124; 05.04.2020
comment
Теперь намного лучше;) Проверьте мой отредактированный ответ. Вы должны заставить его работать сейчас. не волнуйтесь, вы тоже получите пользу в один прекрасный день, просто найдите время, чтобы прочитать все ссылки, которые люди предоставляют, они действительно полезные ресурсы. - person dc37; 05.04.2020