Построить ряд из переменной, содержащей вектор в решетке - PullRequest
1 голос
/ 05 марта 2020

Во-первых: уже существует еще один вопрос с почти одинаковым названием Построить список строк с 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

Я бы предпочел отправить вектор имен столбцов вместо жестко закодировано: как это сделать? Форма будет выглядеть примерно так:

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")))))

1 Ответ

1 голос
/ 05 марта 2020

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

# packages
library(lattice)
library(tibble)

# data
df = tibble(
  exposed = c(50, 80, 90), 
  confirmed = c(10, 20, 30),
  recovered= c(3, 5, 7)
)
Day = seq_len(nrow(df))

# plot
plotVars = c("exposed", "confirmed", "recovered")

xyplot(
  formula(paste(paste0(plotVars, collapse = " + "), "Day", sep = " ~ ")), 
  data = df,
  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"))
    )
  )
)

Создано в 2020-03-05 пакетом Представить (v0.3.0)

...