2016-12-04 5 views
1

У меня проблема с правильным цветовым диапазоном на моем сюжете и легенде.Проблема spplot с распределением цветов и распределением цветов

Это код, который я использую:

data.ch4 <- read.csv2("v42_CH4_1970_TOT.txt",skip = 3,stringsAsFactors = FALSE, header = F) 
num_data <- data.frame(data.matrix(data.ch4)) 

library(maptools) 
library(lattice) 
library(png) 

#map loading 
map1 <- readShapePoly("CNTR_2014_03M_SH/Data/CNTR_RG_03M_2014.shp") 
coordinates(num_data) <- ~V2+V1 
gridded(num_data) <- TRUE 

#plotting 
png(file="Map2.png",width=35,height=30,unit="cm", res=200, type = "cairo") 

spplot(num_data["V3"], xlim=c(-5,35), ylim=c(35,70), 
      sp.layout = list("sp.polygons",map1),contour=F) 
dev.off() 

Вот файл с данными: https://www.sendspace.com/file/hjtatp (сжатый beacuse нормально весит 57 мб)

Карта от here (но карта имеет второстепенное значение, его может быть пропущена)

Вот как это выглядит без каких-либо масштабных изменений: enter image description here

Итак, все синее. Очевидно, что существует расстояние до большого масштаба, от минимального до максимального значения. Я хотел бы исправить скальп, например. последнее значение будет «выше x». Я пытался сделать это так:

enter image description here

Так что теперь это выглядит намного лучше. Вот как я это сделал:

#Fixed breakpoints (?) 
at <- c(0e+0, 1.5e-5, 1.0e-4, 1.0e-3, 1.0e-2, 1.0e-1, 1.0e+0, 2.0e+0, 1.0e+1, 1.0e+2, 2.0e+2,5.0e+2) 

spplot(num_data["V3"], xlim=c(-5,35), ylim=c(35,70), 
      sp.layout = list("sp.polygons",map1), 
      contour=F, 
      at=at) #right there 

Таким образом, я добавил вручную значения (но не точно). Все выглядит намного лучше, но ..

Как вы можете видеть, шкала справа распределена неравномерно. Я не вижу ни одного сине-пурпурного цвета, только оранжевого и желтого.

Также некоторые пятна на карте ярко-желтые (область Германии), потому что здесь самые высокие значения, но, к сожалению, такого цвета на шкале нет.

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

enter image description here

Я достиг этого путем добавления:

spplot(num_data["V3"], xlim=c(-5,35), ylim=c(35,70), 
      sp.layout = list("sp.polygons",map1), 
      contour=F,at=at, 
      colorkey=list(at=seq(0, 400, 30)) #right there 
      ) 

Но опять же, это просто фальшивка масштаб, он не будет работать.

И второй быстрый вопрос: как добавить контуры страны на вершине spplotted данных? Потому что теперь контуры затухают под яркими данными: c

ответ

3

Данные, преобразованные в коэффициент, дают регулярные интервалы легенде. И вы можете менять метки и их позиции на colorkey = list(labels = list(at = ..., labels = ...)).

[Edited; (I noticed that some values are over 500, sorry)] 

## convert numeric to factor 
[email protected]$cutV3 <- cut([email protected]$V3, breaks = c(at, Inf)) # I modified the breaks 

spplot(num_data["cutV3"], xlim=c(-5, 35), ylim=c(35, 70), 
    colorkey = list(height = 1, labels = list(at = seq(0.5, length(at) -0.5), labels = at)), 
    sp.layout = list("sp.polygons", map1, first = F), contour = F) # drawn after main plot 

enter image description here

+0

Awesome! Это именно то, что мне нужно! Большое спасибо :) – Karmel

+0

Еще одна вещь: можно ли масштабировать цвета от синего до желтого до красного (сине-желто-красный)? Я думал о схеме радуги, но я могу использовать только зеленый-красный-красный или сине-розовый-красный – Karmel

+1

@ Karmel; 'spplot (..., col.regions = colorRampPalette (c (« синий »,« желтый »,« красный »)), ...)' именно то, что вы хотите. – cuttlefish44

Смежные вопросы