Создать линейный график с несколькими линиями в R - PullRequest
1 голос
/ 05 апреля 2020

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

Мой фрейм данных имеет годы 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 быть "Race" вместо отдельных меток. И больше, чем просто перемаркировка - я хочу, чтобы график отражал фактические увеличения / уменьшения, а не прямую линию по диагонали вниз, как сейчас.

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

новый возвращаемый участок

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

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)

1 Ответ

1 голос
/ 05 апреля 2020

Сначала необходимо преобразовать набор данных в более длинный формат, используя, например, функцию 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")

enter image description here Отвечает ли он на ваш вопрос?

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

...