Установить контрольные точки для наложения данных на изображение в R - PullRequest
2 голосов
/ 28 февраля 2012

Я видел несколько вопросов здесь (один был даже мной) относительно использования R для построения изображения.

Разница здесь в том, что мне нужно установить контрольные координаты для моего изображения, чтобы они соответствовали данным, которые я ищу на графике поверх изображения.

В частности, мне нужно R, чтобы понять, что координаты для фонового изображения: x = (-100,100) и y = (40,-40).

Я смог прочитать файл изображения и построить его с помощью пакета ReadImages, но когда я наложил свои данные с помощью points(), данные, очевидно, не выстроились в линию соответствующим образом.

Любая помощь очень ценится.

РЕДАКТИРОВАТЬ: вот некоторые примеры данных, и я прикрепил изображение enter image description here:

structure(list(teamid = c("6", "6", "6", "6", "6", "6", "2", 
"6", "6", "6", "2", "6", "10", "10", "10", "10", "20", "20", 
"10", "10", "10", "20", "20", "20", "10", "10"), xcoord = c("79", 
"81", "33", "34", "75", "52", "-67", "80", "44", "79", "-53", 
"54", "-55", "-81", "-66", "-66", "45", "81", "-78", "-70", "-59", 
"50", "53", "63", "-79", "-78"), ycoord = c("0", "0", "-18", 
"-20", "6", "-11", "-7", "7", "-28", "-10", "35", "22", "25", 
"-5", "25", "23", "-11", "13", "22", "16", "13", "23", "7", "16", 
"8", "8")), .Names = c("teamid", "xcoord", "ycoord"), class = "data.frame", row.names = c(74328L, 
74331L, 74332L, 74334L, 74336L, 74338L, 74340L, 74341L, 74346L, 
74347L, 74348L, 74349L, 100136L, 100137L, 100138L, 100139L, 100147L, 
100148L, 100151L, 100154L, 100156L, 100158L, 100159L, 100161L, 
100163L, 100167L))

1 Ответ

3 голосов
/ 29 февраля 2012

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

Другой подход заключается в использовании функции updateusr из пакета TeachingDemos после построения изображения, чтобы убедиться, что координаты совпадают с желаемыми, прежде чем добавлять линии или точки.

Я сохранил вашу графику выше как ice.png и запустил следующий код:

library(EBImage)
ice <- readImage('My Pictures/ice.png')
pos <- structure(list(teamid = c("6", "6", "6", "6", "6", "6", "2",
  "6", "6", "6", "2", "6", "10", "10", "10", "10", "20", "20",
  "10", "10", "10", "20", "20", "20", "10", "10"), xcoord = c("79",
  "81", "33", "34", "75", "52", "-67", "80", "44", "79", "-53",
  "54", "-55", "-81", "-66", "-66", "45", "81", "-78", "-70", "-59",
  "50", "53", "63", "-79", "-78"), ycoord = c("0", "0", "-18",
  "-20", "6", "-11", "-7", "7", "-28", "-10", "35", "22", "25",
  "-5", "25", "23", "-11", "13", "22", "16", "13", "23", "7", "16",
  "8", "8")), .Names = c("teamid", "xcoord", "ycoord"),
 class = "data.frame", row.names = c(74328L,
  74331L, 74332L, 74334L, 74336L, 74338L, 74340L, 74341L, 74346L,
  74347L, 74348L, 74349L, 100136L, 100137L, 100138L, 100139L, 100147L,
  100148L, 100151L, 100154L, 100156L, 100158L, 100159L, 100161L,
  100163L, 100167L)) 
pos$xcoord <- as.numeric(pos$xcoord)
pos$ycoord <- as.numeric(pos$ycoord)

ice2 <- as.raster(ice)

pin <- par('pin')
plot( c(-100,100), c(-40,40), type='n', xlab='', ylab='', 
    asp=pin[1]/pin[2], axes=FALSE, xaxs='i', yaxs='i')
rasterImage(ice2, -100, -40, 100, 40, interpolate=FALSE)
with(pos, text(xcoord, ycoord, teamid, col='green', cex=1.2) )

Делает ли это то, что вы хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...