370 likes | 701 Views
Создание мелкомасштабных растровых карт в R. Никита Платонов platonov@sevin.ru Институт проблем экологии и эволюции им. А.Н.Северцова РАН (ИПЭЭ РАН) Программа изучения белого медведя в Российской Арктике. Причина (~200 7г. ). IDRISI + Visio + визуальная подгонка +. Цели.
E N D
Создание мелкомасштабных растровых карт в R Никита Платонов platonov@sevin.ru Институт проблем экологии и эволюции им. А.Н.Северцова РАН (ИПЭЭ РАН) Программа изучения белого медведя в Российской Арктике
Причина (~2007г.) IDRISI + Visio + визуальная подгонка + ...
Цели Автоматизация построения статических карт Задачи • Беглый взгляд на данные независимым вьювером • Комплексная компоновка (панель рисунков) • Подготовка иллюстраций для печати в научных журналах
Реализация NCAR Command Language панель – да, слои – да, (x,y)-проекции – ???, кириллица – да?
Реализация QGIS print composer Слои, аннотации, кириллица
Реализация ГИСы Визуальная компоновка, оформление, HiRes экспорт,…
Стандартные средства R # Здесь и далее код не воспроизводимый > str(img.list) List of 3 $ x: num [1:304] -3837500 -3812500... $ y: num [1:448] -5337500 -5312500 ... $ z: num [1:304, 1:448] NA 00100 ... NULL > str(img.data.frame) 'data.frame': 67455 obs. of 3 variables: $ x: num -3837500 -3812500 -3787500 ... $ y: num 5837500 5837500 5837500 ... $ z: num 898989 NA ... NULL
Стандартные средства R > mycol <- colorRampPalette(c("darkblue","white"))(11) > image(img,asp=1,col=mycol)
Стандартные средства R > filled.contour(img,asp=1,levels=20)
R: Package lattice > str(coast) num [1:99607, 1:2] NA -1429373 -1431447 -1433519 ... NULL > str(img) 'data.frame': 63082 obs. of 4 variables: $ x: num -187500 -162500 -137500 -112500 -087500 ... $ y: num 187500 187500 187500 187500 187500 ... $ z: num 0 0 0 0 0 0 0 0 0 0 ... $ w: Factor w/ 2 levels "Mar","Sep": 1 1 1 1 1 1 1 ... NULL
R: Package lattice levelplot(z~x+y|w,data=img ,panel = function(...){ panel.levelplot(...) panel.polygon(coast,col="grey65")} ,scales=list(draw=FALSE),xlab="",ylab="")
R: Package ggplot2 ggplot(img,aes(x,y,fill=z))+ geom_raster()+scale_fill_continuous(name="Ice Conc")+ coord_cartesian(xlim=xlim,ylim=ylim)+facet_grid(.~w)+ geom_polygon(data=coast,colour="green",fill="#FFFF003F")+ geom_path(data=grid,colour="darkred")
Формат экспортируемой карты # > pdf("out1.pdf", width=7, height=7, pointsize=16) > postscript(...) > png("out2.png", width=7, height=7, units=“in”, res=300,pointsize=16) > tiff(...) #
План разметки # > nc <- 2 # horisontal panels > nr <- 1 # vertical panels > mosaic <- matrix(0,ncol=nc*2+3,nrow=nr*2+3) > mosaic[5,3] <- 1 > mosaic[5,5] <- 2 … > mosaic [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 0 0 0 0 0 0 0 [2,] 0 0 0 0 0 0 0 [3,] 0 0 5 0 6 0 0 [4,] 0 0 0 0 0 0 0 [5,] 3 0 1 0 2 0 4 [6,] 0 0 0 0 0 0 0 [7,] 0 0 7 0 8 0 0 #
Размеры элементов оформления # Создаем два вектора, отвечающих за размер > s.indent <- 0.0125 > s.legend <- 0.04 # s.imgc, s.imgr ~ число строк, столбцовизображения > sizec <- rep(s.indent,2*nc+3) > sizer <- rep(s.indent,2*nr+3) > sizec[3] <- s.imgc > sizer[5] <- s.imgr > sizec[7] <- s.legend … > png_width <- round(sum(sizec)*dpi/2.54+extrac) > png_height <- round(sum(sizer)*dpi/2.54+extrar) #
Размеры элементов оформления # Формируем расположение > nf <- layout(mosaic,widths=lcm(sizec), heights=lcm(sizer),respect=TRUE)
План разметки # Выбор палитры, задание числа цветов >require(RColorBrewer)
Оформление легенды Выбор палитры • Цветовой градиент (?colorRamp) • Фиксированное число панелей Задание типа экстремумов для отображения • Минимальное, максимальное значение • Кумулятивные хвосты (%) • Фиксированный разброс от среднего • Вручную Отображение легенды
Оформление легенды Подписи легенды • Буквенные (категории) • Численные (не нужны безобразные дроби)> pretty(x,n=nbar)# Цикл по параметрам с критерием выбора> scale*pretty(x/scale,n=nbar)# Акцентировать ли внимание на НОЛЬ? Соответствие значений легенды и изображения • Решкалирование изображения к категориям легенды – [minx,maxx) или (minx,maxx] • Ремасштабирование изображения под пространственное разрешение карты
Вывод растра > par(mar=c(0,0,0,0)) > image(x,...)
Вывод координатной сетки > lines(grid,col=“grey45”,lty=2)
Вывод береговой линии > polygon(coast,col=“transparent”) > ?lines
Маскирование суши > polygon(coast) > ?polypath # дырки, но без полутонов/штрих.
Использование градаций серого > polygon(coast,density=15,angle=c(-45,45))
Добавление аннотации > rect(minx,miny,maxx,maxy,col=ann.bg) > text(x0,y0,displayed.text)
Вертикальная легенда > image(x=1,y=bar,z=matrix(bar,nrow=1)) > abline(h=hset,v=NULL); box()
Подписи легенды > mtext(nums,side=4,line=sh.label,...) > mtext(desc,side=4,line=sh.desc,...)
Добавление контура > cl <- contourLines(...,level=15) > sapply(cl,function(x) lines(x))
Растр + контур с легендами >image(imgAir); lines(isoHgt,...) > image(legendAir); image(legendHgt)
Растр + контур + указатели >image(img1); lines(isoheight,...) >arrows(wnd,...)
Наложение полигонов >image(slpImg) >polygon(signif95,density=15,angle=45)
Примеры использования Многопанельные карты
Примеры использования Наслоение кириллицы с помощью ImageMagick
Примеры использования Очистка пустого пространства – внешний софт
Выводы Отображение растра, цветовой легенды – image() Отображение линий – lines(), segments(), contour() Отображение точек – points() Отображение полигонов – polygon(), polypath() Отображение аннотаций – text(), legend() - cлабая поддержка кириллицы - подписи contour()не всегда результативны - неэффективно при множественных подписях TODO-список: Масштабная линейка Указатель на север
Спасибо Никита Платонов (ИПЭЭ РАН) platonov@sevin.ru