Линии в растре не выравниваются по полигонам - PullRequest
1 голос
/ 04 мая 2020

У меня проблемы с выравниванием сеток на созданном мной графике. В основном графики показывают результат матрицы 34x34, где каждая точка имеет значение 0,1,2,3 и окрашивается на основе этого. Линии, очерчивающие ячейки, не идеально соответствуют цвету ячеек. Мой код и изображение ниже.

library(raster)

r<-raster(xmn=1,xmx=34,ymn=1,ymx=34,nrows=34,ncols=34)

data1<-read.csv(file ="mat_aligned.csv",row.names = 1)

numbers<-data.matrix(data1)

r[]<-numbers

breakpoints<-c(-1,0.1,1.1,2.1,3.1)

colors<-c("white","blue","green","red")

plot(r,breaks=breakpoints,col=colors)

plot(rasterToPolygons(r),add=TRUE,border='black',lwd=3)

Я был бы признателен за любую помощь с этим!

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Проблема в том, что базовый график R и рисование сетки используют разные системы построения. Многоугольники будут оставаться постоянными относительно окна построения графика (они будут казаться более узкими по мере уменьшения окна) и не сохранят своих отношений с нижележащими осями графика, тогда как цветные квадраты изменят размер, чтобы сохранить форму. Вы, вероятно, обнаружите, что можете улучшить соответствие вашей сетки, изменив размер окна, но, конечно, это не идеально.

Лучший способ обойти это - использовать спецификацию c метод, предназначенный для построения SpatialPolygonDataFrame, который является классом S4, созданным rasterToPolygons. В конце концов, именно так вы «предназначены» для создания такого сюжета.

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

library(raster)
r <- raster(xmn = 1, xmx = 34, ymn = 1, ymx = 34, nrows = 34, ncols = 34)
r[] <- data.matrix(as.data.frame(replicate(34, sample(0:3, 34, TRUE))))
colors <- c("white","blue","green","red")
spplot(rasterToPolygons(r), at = 0:4 - 0.5, col.regions = colors)

Создано 2020-05-04 пакетом REPEX (v0.3.0)

0 голосов
/ 05 мая 2020

Трудно помочь, если вы не предоставите минимальный автономный воспроизводимый пример. Примерно так

library(raster)
r <- raster(xmn=1,xmx=34,ymn=1,ymx=34,nrows=34,ncols=34)
values(r) <- sample(4, ncell(r), replace=T)
p <- rasterToPolygons(r)
plot(r)
lines(p)

Я вижу то, что вы описываете, хотя это минимально. Обходом может быть только построение полигонов

colors<-c("white","blue","green","red")
plot(p, col=colors[p$layer]) 
...