Построение нескольких временных рядов на одном и том же участке с использованием ggplot()
Я новичок в R и пытаюсь построить две линии временных рядов одновременно (используя разные цвета, конечно), используя ggplot2.
У меня есть 2 кадра данных. первый имеет столбцы "Процент изменения для X" и "Дата". Второй имеет "Процентное изменение для столбцов Y" и "Дата", то есть оба столбца "Дата" имеют одинаковые значения, тогда как столбцы "Процент изменения" имеют разные значения.
Я хотел бы построить столбцы "Процент изменения" в "Дата" (общий для обоих), используя ggplot2 на одном графике.
В примерах, которые я нашел в Интернете, для достижения этого использовался один и тот же кадр данных с разными переменными, я не смог найти что-либо, что использует 2 кадра данных для перехода к сюжету. Я не хочу связывать два кадра данных вместе, я хочу, чтобы они были разделены. Вот код, который я использую:
ggplot(jobsAFAM, aes(x=jobsAFAM$data_date, y=jobsAFAM$Percent.Change)) + geom_line() +
xlab("") + ylab("")
Но этот код создает только одну строку, и я хотел бы добавить еще одну строку поверх нее.
Любая помощь приветствуется.
ТИА.
Ответы
Ответ 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 серий как "несколько"). Пожалуйста, я запутался и мне нужна помощь. Я искренне ценю ваш вклад. Убани