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

Построение нескольких временных рядов на одном и том же участке с использованием ggplot()

Я новичок в R и пытаюсь построить две линии временных рядов одновременно (используя разные цвета, конечно), используя ggplot2.

У меня есть 2 кадра данных. первый имеет столбцы "Процент изменения для X" и "Дата". Второй имеет "Процентное изменение для столбцов Y" и "Дата", то есть оба столбца "Дата" имеют одинаковые значения, тогда как столбцы "Процент изменения" имеют разные значения.

Я хотел бы построить столбцы "Процент изменения" в "Дата" (общий для обоих), используя ggplot2 на одном графике.

В примерах, которые я нашел в Интернете, для достижения этого использовался один и тот же кадр данных с разными переменными, я не смог найти что-либо, что использует 2 кадра данных для перехода к сюжету. Я не хочу связывать два кадра данных вместе, я хочу, чтобы они были разделены. Вот код, который я использую:

ggplot(jobsAFAM, aes(x=jobsAFAM$data_date, y=jobsAFAM$Percent.Change)) + geom_line() +
  xlab("") + ylab("")

Но этот код создает только одну строку, и я хотел бы добавить еще одну строку поверх нее. Любая помощь приветствуется. ТИА.

4b9b3361

Ответ 1

ggplot позволяет вам иметь несколько уровней, и именно это вы должны использовать здесь.

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

library(ggplot2)

jobsAFAM1 <- data.frame(
  data_date = runif(5,1,100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM2 <- data.frame(
  data_date = runif(5,1,100),
  Percent.Change = runif(5,1,100)
)

ggplot() + 
  geom_line(data = jobsAFAM1, aes(x = data_date, y = Percent.Change), color = "red") +
  geom_line(data = jobsAFAM2, aes(x = data_date, y = Percent.Change), color = "blue") +
  xlab('data_date') +
  ylab('percent.change')

Ответ 2

Если оба кадра данных имеют одинаковые имена столбцов, вы должны добавить один кадр данных внутри вызова ggplot(), а также указать значения x и y внутри aes() вызова ggplot(). Затем добавьте первую geom_line() для первой строки и добавьте второй вызов geom_line() с data=df2 (где df2 - ваш второй фрейм данных). Если вам нужно иметь строки в разных цветах, добавьте color= и имя для строки eahc внутри aes() для каждого geom_line().

df1<-data.frame(x=1:10,y=rnorm(10))
df2<-data.frame(x=1:10,y=rnorm(10))

ggplot(df1,aes(x,y))+geom_line(aes(color="First line"))+
  geom_line(data=df2,aes(color="Second line"))+
  labs(color="Legend text")

enter image description here

Ответ 3

Я предпочитаю использовать библиотеку ggfortify. Это оболочка ggplot2, которая распознает тип объекта внутри функции автозапуска и выбирает лучшие методы ggplot для построения. По крайней мере, мне не нужно помнить синтаксис ggplot2.

library(ggfortify)
ts1 <- 1:100
ts2 <- 1:100*0.8
autoplot(ts( cbind(ts1, ts2)  , start = c(2010,5), frequency = 12 ),
         facets = FALSE)

Plot

Ответ 4

Я знаю, что это старо, но это все еще актуально. Вы можете использовать reshape2:: melt, чтобы изменить dataframe на более дружественную структуру для ggplot2.

Преимущества:

  • позволяет построить любое количество строк
  • каждая строка с другим цветом
  • добавляет легенду для каждой строки
  • только с одним вызовом ggplot/geom_line

Неудобство:

  • требуется дополнительный пакет (reshape2)
  • плавление не так интуитивно сперва

Например:

jobsAFAM1 <- data.frame(
  data_date = seq.Date(from = as.Date('2017-01-01'),by = 'day', length.out = 100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM2 <- data.frame(
  data_date = seq.Date(from = as.Date('2017-01-01'),by = 'day', length.out = 100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM <- merge(jobsAFAM1, jobsAFAM2, by="data_date")

jobsAFAMMelted <- reshape2::melt(jobsAFAM, id.var='data_date')

ggplot(jobsAFAMMelted, aes(x=data_date, y=value, col=variable)) + geom_line()

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

Ответ 5

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

library(ggplot2)
library(dplyr)

df1 <- data.frame(dates = 1:10,Variable = rnorm(mean = 0.5,10))
df2 <- data.frame(dates = 1:10,Variable = rnorm(mean = -0.5,10))

df3 <- df1 %>%
  mutate(Type = 'a') %>%
  bind_rows(df2 %>%
              mutate(Type = 'b'))


ggplot(df3,aes(y = Variable,x = dates,color = Type)) + 
  geom_line()

Ответ 6

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

BillAir <- read.csv(file.choose(), header = T, sep = ",", row.names = 1) gt <- ts (BillAir, start = c (1949), end = c (1960), частота = 1) класс (gt) итоговый (gt) цикл (gt), но когда я помещаю plot (gt), он не дает ожидаемого результата, как в примере, но записывает ошибку в графиках (x = x, y = y, plot.type = plot.type, xy.labels = xy.labels,: не может представить более 10 серий как "несколько"). Пожалуйста, я запутался и мне нужна помощь. Я искренне ценю ваш вклад. Убани