R - Контурная карта

Я построил контурную карту, но мне нужно внести некоторые улучшения. Это структура данных, которые используются:

str(lon_sst)
# num [1:360(1d)] -179.5 -178.5 -177.5 -176.5 -175.5 ...

str(lat_sst)
# num [1:180(1d)] -89.5 -88.5 -87.5 -86.5 -85.5 -84.5 -83.5 -82.5 -81.5 -80.5 ...

dim(cor_Houlgrave_SF_SST_JJA_try)
# [1] 360 180

require(maps)
maps::map(database="world", fill=TRUE, col="light blue")
maps::map.axes()
contour(x=lon_sst, y=lat_sst, z=cor_Houlgrave_SF_SST_JJA_try[c(181:360, 1:180),],
        zlim=c(-1,1), add=TRUE)
par(ask=TRUE)
filled.contour(x = lon_sst, y=lat_sst,
               z=cor_Houlgrave_SF_SST_JJA_try[c(181:360, 1:180),],
               zlim=c(-1,1), color.palette=heat.colors)

введите здесь описание изображениявведите здесь описание изображения

Поскольку большинство корреляций близки к 0, очень трудно увидеть большие.

  1. Могу ли я сделать его более удобным для просмотра, или я могу изменить разрешение, чтобы увеличить его? На данный момент контуры расположены слишком близко друг к другу, поэтому я не вижу, какие были уровни контуров.

  2. Где я могу увидеть приращение, я установил свой диапазон как (-1,1), я не знаю, как установить интервал вручную.

  3. Может ли кто-нибудь сказать мне, как построить конкретную область карты, например, долготу от 100 до 160 и широту от -50 до -80? Я пытался заменить lon_sst и lat_sst, но у него ошибка размера. Спасибо.


person Yu Deng    schedule 07.02.2012    source источник
comment
(1) вы можете попробовать увеличить размер шрифта или использовать полужирный шрифт с аргументами contour(), например. labcex=1, vfont=c('sans serif', 'bold'); (2) используйте levels в contour(), например. levels=seq(-1, 1, 0.25) ; (3) Вы можете использовать xlim и ylim в map().   -  person jbaums    schedule 07.02.2012


Ответы (2)


Чтобы ответить на 1 и 3, которые кажутся одним и тем же запросом, попробуйте:

maps::map(database="world", fill=TRUE, col="light blue", 
                            ylim=c(-80, -50), xlim=c(100,160) )

Для адреса 2: у вас гораздо меньший диапазон, чем [-1,1]. Метки на этих контурных линиях представляют собой числа, такие как .06, -.02 и .02. Функция contour будет принимать либо аргумент «nlevels», либо «levels». Когда у вас есть увеличенная секция, вы можете использовать ее для настройки z-разрешения контуров.

person IRTFM    schedule 07.02.2012

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

У меня нет ваших данных о температуре поверхности моря, поэтому на следующем рисунке используются фиктивные данные, но вы должны получить что-то похожее. См. ?contourplot и ?panel.levelplot возможные аргументы.

Для желаемого мелкомасштабного участка наложение графика карты мира, вероятно, неуместно, особенно если учесть, что интересующая область находится в океане.

library(lattice)
contourplot(cor_Houlgrave_SF_SST_JJA_try, region=TRUE, at=seq(-1, 1, 0.25), 
  labels=FALSE, row.values=lon_sst, column.values=lat_sst,
  xlim=c(100, 160), ylim=c(-80, -50), xlab='longitude', ylab='latitude')

Здесь аргумент at управляет положением значений, при которых будут рассчитываться и строиться контурные линии (и, следовательно, количество разрывов в цветовой шкале). В моем примере контурные линии имеют значения -0,75, -0,5, -0,25, 0, 0,25, 0,5, 0,75 и 1 (где -1 является фоном). Например, при изменении на at=seq(-1, 1, 0.5) контурные линии будут иметь значения -0,5, 0, 0,5 и 1.

пример использования контурной диаграммы с фиктивными данными

person jbaums    schedule 07.02.2012
comment
Эта функция великолепна, но проблема в том, что я не могу найти аргумент, чтобы установить землю как заполненную цветом, если я рисую с большим диапазоном. В моем исходном я могу установить его как maps::map(database=world, fill=TRUE, col=light blue), могу ли я сделать то же самое здесь? - person Yu Deng; 08.02.2012