R: заголовок и абстракция для нескольких графиков, созданных с помощью lapply - PullRequest
1 голос
/ 07 апреля 2019

Я генерирую несколько графиков, используя lapply для извлечения данных из вектора для каждого из графиков.

Проблема:

  • Мне нужно построить abline для каждого графика, но он отображается только в последнем.
  • В идеале, я бы также нарисовал разные заголовки для каждого из графиков.

Данные:

  • perfs - это вектор с 3 элементами, каждый из которых содержит основные данные для графика.
  • Каждый элемент в perfs соответствует значению k, которое ранее было определено в векторе ks = c(5,7,11)

Я попытался добавить аргументы для lapply.

   lapply(perfs, function(perf) {plot(perf, main = paste0("Curva ROC", ks), col = "#42f4bf", lwd = 4)})
   abline(a = 0, b = 1, lwd = 2, lty = 2)

Фактический:

  • abline только на последнем участке.
  • Название повторяется для каждого из k на каждом графике: ROC Curve5 ROC Curve7...
  • Это последний сюжет: roc_curve_wrong

Ожидаемый:

  • Название: ROC Curve 5; РПЦ Кривая 7 ...
  • abline на каждом графике

Ответы [ 2 ]

1 голос
/ 07 апреля 2019

Чтобы иметь правильный заголовок для каждого графика, вам нужно иметь способ связать элементы perfs с элементами ks, чтобы вы могли просто выбрать тот, который вам нужен для каждого графика.
Один из способов сделать это (возможно, самый простой) - использовать цикл for, а не lapply, и использовать ks[i] в параметре main plot.Если вы предпочитаете использовать lapply, то я думаю, что match должно работать нормально (как в моем коде ниже), при условии, что каждый из элементов perfs отличается.

Чтобы иметь abline для каждого графика , вам нужно включить часть abline в функцию, которую вы вызываете в lapply, чтобы вы запускали эту часть рядом с каждым графиком.

lapply(perfs, function(perf) {
  k <- ks[match(list(perf), perfs)]     # Only need list() is perfs is a list
  plot(perf, main = paste0("Curve ROC", k), col = "#42f4bf", lwd = 4)
  abline(a = 0, b = 1, lwd = 2, lty = 2)
})
0 голосов
/ 08 апреля 2019

Я использую цикл for, предложенный @ hodgenovice

Я использую индекс ind для доступа к значениям k в векторе ks. Таким образом, я могу построить abline для каждого графика, а также назвать их в соответствии со значением k.

ks <-c(5, 7, 11) # the previously defined values of k

ind <- 1 # index used for accessing ks
for (perf in perfs){  # each perf in perfs contains data used in the plot
     k <- ks[ind]
     ind <- ind + 1
     plot(perf, main = paste0("ROC Curve k = ", k), col = "#42f4bf", lwd = 4) 
     abline(a = 0, b = 1, lwd = 2, lty = 2)
}
...