Во-первых: уже существует еще один вопрос с почти одинаковым названием Построить список строк с R решетчатым пакетом : но намерение по этому вопросу другое - каждый хочет отдельный график для каждого колонка. Мне нужен отдельный сюжет с сериями, в которых наложены все линии. Для этой цели рабочая версия жестко закодированных имен столбцов:
library(lattice)
library(tibble)
cols = c('confirmed','recovered','exposed')
df = tibble( exposed= c(50,80,90), confirmed= c(10,20,30), recovered= c(3,5,7))
City1=df
Day = c(1:length(df))
Exposed=df$exposed
Confirmed=df$confirmed
Recovered=df$recovered
xyplot(Exposed + Confirmed + Recovered~ Day, main='City1 Stats',xlab='Day',ylab='Cases',
cex.lab=0.6, xaxt="n", type = "l", auto.key = list(points = FALSE,lines = TRUE,
par.settings = list(superpose.line = list(col = c("green","red","orange")))))
![enter image description here](https://i.stack.imgur.com/2i84T.png)
Я бы предпочел отправить вектор имен столбцов вместо жестко закодировано: как это сделать? Форма будет выглядеть примерно так:
plotVars = c(Exposed, Confirmed, Recovered)
xyplot( plotVars ~ Day, main='City1 Stats',xlab='Day',ylab='Cases',
cex.lab=0.6, xaxt="n", type = "l",
auto.key = list(points = FALSE,lines = TRUE,
par.settings = list(superpose.line = list(col = c("green","red","orange")))))
Что нужно сделать, чтобы сделать plotVars
понятным списком для xyplot
?
Обновление Из Ответ ниже: рекомендуется использовать paste
для установки имен столбцов с +
в качестве разделителя. Вот обновленный код, использующий этот подход:
library(lattice)
cols = c('confirmed','recovered','exposed')
df = tibble( exposed= c(50,80,90), confirmed= c(10,20,30), recovered= c(3,5,7))
City1=df
Day = c(1:length(df))
exposed=df$exposed
confirmed=df$confirmed
recovered=df$recovered
fml = formula(paste(paste0(cols, collapse = " + "), "Day", sep = " ~ "))
xyplot(fml, main='City1 Stats',xlab='Day',ylab='Cases', cex.lab=0.6,
xaxt="n", type = "l", auto.key = list(points = FALSE,lines = TRUE,
par.settings = list(superpose.line = list(col = c("green","red","orange")))))