Легенда в сюжете ppp

Я создаю пространственную карту деревьев на основе координат x-y, используя пакет spatstat и функцию ppp. Мне удалось это сделать, и размер каждой точки зависит от диаметра дерева. Чего я не смог сделать и надеюсь найти здесь некоторую помощь, так это создать легенду, которая позволит мне показать эти разные круги, а также включить в сюжет 6 видов деревьев. Вот код, который я использую:

df <- subset(plots, plots$spp == "DF")  # Douglas-fir

dfx <- as.numeric(as.character(df$x))
dfy <- as.numeric(as.character(df$y))
dfd <- as.numeric(as.character(df$d))

dfp <- ppp(dfx, dfy, window = owin(c(0, 100), c(0, 100)),
                  unitname=c("metres","metres"), marks = dfd)
par(mar = c(2, 2, 2, 2))                                           
plot(dfp, main = "", cex = 0.8, markscale = 0.04, 
     bg = rgb(0.1,0.9,0.3,0.5), fg = "black")

У меня аналогичная структура для всех видов в сюжете (а для западной тсуги код одинаковый ...)

Спасибо!


person Emilio Vilanova    schedule 22.09.2016    source источник
comment
Просто для пояснения: вы хотите, чтобы каждый вид был нанесен на график разным цветом, а затем включил легенду, соединяющую названия видов с цветами?   -  person Ege Rubak    schedule 22.09.2016


Ответы (1)


Сначала соберите все данные в один объект ppp с помощью superimpose. Например, если у вас есть Douglas Fir dfp и Western Hemlock whp, тогда

  X <- superimpose(DF=dfp, WH=whp)

создает точечный узор X, в котором каждая точка имеет два значения отметки: вид и диаметр. Для удобства измените названия столбцов отметок:

  colnames(marks(X)) <- c("diameter", "species")   

Затем определите карту условных обозначений для диаметров (ничего не вычерчивая):

  dmap <- plot(subset(X, select=diameter), do.plot=FALSE)

Затем выберите набор цветов для разных видов, например

  spec <- levels(marks(X)$species)
  scol <- c("red", "blue")
  smap <- symbolmap(inputs=spec, col=scol)

Теперь нарисуйте виды в отдельные цвета, используя карту масштаба диаметра:

  plot(Window(X), main="The main title")
  for(i in seq_along(spec)) {
     sy <- update(dmap, col=scol[i])
     Xi <- subset(X, species==spec[i], select=diameter)
     plot(Xi, add=TRUE, symap=sy)
  }

Наконец, постройте две карты символов dmap и smap в нужных местах, используя plot(dmap, add=TRUE, xlim=..., ylim=...) и так далее.

В будущем это будет автоматизировано, но пока это не реализовано.

person Adrian Baddeley    schedule 23.09.2016
comment
[Наложение] идеально подходит для создания одного уникального объекта ppp. Тем не менее, я получаю сообщения об ошибках для [dmap ‹- plot (subset (X, select = Diameter), do.plot = FALSE)]. Ошибка: Ошибка в subset.default (X, select = Diameter): отсутствует подмножество аргументов, значение по умолчанию отсутствует. - person Emilio Vilanova; 25.09.2016
comment
[superimpose] отлично подходит для создания одного уникального объекта ppp. Тем не менее, я получаю сообщения об ошибках для [dmap ‹- plot (subset (X, select = Diameter), do.plot = FALSE)]. Ошибка: Ошибка в subset.default (X, select = Diameter): отсутствует подмножество аргументов, значение по умолчанию отсутствует. Я пробовал использовать функцию слюны, но тоже не сработало. Функция символьной карты принадлежит ggplot? Я новичок во всем этом и путаюсь с ошибкой, когда не могу найти карту символов. У меня также была ошибка в sy: Error en update.default (dmap, col = scol [X1i]): нужен объект с компонентом вызова - person Emilio Vilanova; 25.09.2016
comment
Сообщения об ошибках указывают, что либо spatstat не был загружен, либо X не был объектом ppp. Перед выполнением этого кода вам необходимо ввести библиотеку (spatstat). Также убедитесь, что правильный объект X, созданный в первой строке кода, используется в третьей строке кода. Если по-прежнему не работает, опубликуйте минимальный пример. - person Adrian Baddeley; 25.10.2016