R - Контурная карта с несколькими слоями (решетка) - PullRequest
1 голос
/ 09 февраля 2012

Вот мой код и связанные с ним структуры переменных.

Correlation_Plot = contourplot(cor_Warra_SF_SST_JJA, region=TRUE, at=seq(-0.8, 0.8, 0.2), 
labels=FALSE, row.values=(lon_sst), column.values=lat_sst,
xlab='longitude', ylab='latitude')

Correlation_Plot = Correlation_Plot + layer({ ok <- (cor_Warra_SF_SST_JJA>0.6);
            panel.text(cor_Warra_SF_SST_JJA[ok]) })
Correlation_Plot

     # this is the longitude (from -179.5 to 179.5) , 360 data in total
    > str(lon_sst) 
     num [1:360(1d)] -180 -178 -178 -176 -176 ...

     # this is the latitude (from -89.5 to 89.5), 180 data in total 
    > 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 ...

     # This is data set corresponding to longitude and latitude  
     > dim(cor_Warra_SF_SST_JJA) 
       [1] 360 180

enter image description here

Я пытался использовать layer(), чтобы показать метку только для контура больше 0,6, но этоне работает.

  1. Можно ли увеличить цветовые контрасты в легенде, чтобы было действительно ясно, какой цвет реагирует на какой уровень.Какие есть варианты цвета, я не могу их найти?

  2. Самое главное, я хочу нарисовать более толстую черную линию для указанного интервала контура (например, для +/- 0,2)?Я думаю, что ICAN также делает это с layer(), но я не уверен, какую функцию panel я должен использовать.

  3. Кроме того, я попытался заполнить континент твердым теломцвет, но я ничего не могу найти с ним.Я пытался использовать карту, но она не работает для решетки.

Спасибо за вашу помощь.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

Посмотрите на ?panel.levelplot дополнительные аргументы для contourplot.

  1. Вы можете использовать аргумент col.regions, который будет принимать либо вектор цветов, которые вы хотите соответствовать вашим интервалам, либо функцию цветовой шкалы (например, ниже).

  2. Используйте пользовательскую функцию панели, что-то вроде этого (используя пространственно автокоррелированный фиктивный набор данных, сгенерированный с использованием метода, указанного в блоге Сантьяго Бегерии ).Используйте lpolygon для построения объекта карты:

    Создание набора фиктивных данных:

    library(gstat)
    
    # create structure
    xy <- expand.grid(1:360, 1:180)
    names(xy) <- c('x','y')
    
    # define the gstat object (spatial model)
    g.dummy <- gstat(formula=z~1, locations=~x+y, dummy=T, beta=1,    
      model=vgm(psill=0.025,model='Exp',range=5), nmax=20)
    
    # make a simulations based on the gstat object
    yy <- predict(g.dummy, newdata=xy, nsim=1)
    gridded(yy) = ~x+y
    
    # scale to range [-1, 1]
    z <- matrix(yy@data[, 1], ncol=180)
    z.scalefac <- (max(z) - min(z)) / 2
    z <- -1 + (z - min(z)) / z.scalefac
    
  3. График:

    library(lattice)
    library(maps)
    
    lon_sst <- seq(-179.5, 179.5, 1)
    lat_sst <- seq(-89.5, 89.5, 1)
    
    colramp <- colorRampPalette(c('red', 'yellow', 'white', 'green', 'blue'))
    
    contourplot(z, xlim=c(100, 160), ylim=c(-80, -50), 
      at=seq(-1, 1, 0.2), region=TRUE, col.regions=colramp,
      row.values=lon_sst, column.values=lat_sst, labels=FALSE, 
      xlab='longitude', ylab='latitude',
      panel = function(at, region, ...) {
        panel.contourplot(at=at, region=TRUE,  ...)
        panel.contourplot(at=c(-0.2, 0.2), lwd=2, region=FALSE, ...)
        mp <- map("world", "antarctica", plot = FALSE, fill=TRUE)
        lpolygon(mp$x, mp$y, fill=TRUE, col='gray')
    })
    

example output

1 голос
/ 09 февраля 2012

Q1: вам нужно будет использовать llines или panel.lines с теми же данными, которые вы использовали для континентальных контуров в предыдущем вопросе, чтобы сделать это

Q2:

?panel.contour

.... В котором говорится, что «lwd» - доступная опция, и я подозреваю, что вы бы сделали седьмой элемент вектора = 2.

Q3: Возможно, аргумент заполнения, но это следует отметитьчто вы серьезно препятствуете нашим усилиям по тестированию решений, не включая ссылку на данные и свою подготовку данных.

...