2013-09-27 3 views
1

я хотел бы построить карту концентрации хлорофилла, но значения распределены таким образом, что легенда становится нечитаемой (смотрите рисунок)R как контролировать расстояние цвета бара/легенды

chl_a

Так что я пытаюсь контролировать расстояние между цветами в цветовой полосе/легенде. Я бы хотел получить равномерное расстояние (сохраняя неравномерные перерывы на самой карте).

Приведенный ниже пример значительно упрощен и предназначен для растровой графики, но то же самое относится к image.plot.

library(raster)  
r <- raster(ncol=5, nrow=4) 
r[] <- 1:20 
plot(r, breaks = c(0,1,2,3,5,10,20), col = rainbow(6)) 

Я думал о преобразовании данных в значения журнала, но это не дает мне удовлетворительного результата. Так что любая помощь с легендой очень ценится.

+0

Не можете ли вы просто разделить диапазон значений в 'r' в deciles и использовать для colorRamp, который создает палитру, переданную аргументу 'col'? –

+0

Спасибо, это может быть способ обойти проблему, но я скорее останусь в состоянии контроля над разрывами в «r» и найду решение для управления расстоянием между легендами. – Lukas

ответ

2

Это некрасиво, но вы можете использовать plot для карты и image.plot для вашей легенды. Вам нужно будет добавить метки ваших пользовательских разрывов в положение разнесенных интервалов.

карта земля без легенды:

library(raster) 
r <- raster(ncol=5, nrow=4) 
r[] <- 1:20 
my_breaks = c(0,1,2,3,5,10,20) 
n = 6 
my_col = rainbow(n) 
plot(r, breaks = my_breaks, col = my_col, legend = FALSE, zlim=c(0,20)) 

по умолчанию Перерывы будут равномерно распределены от 0 до 20:

def_breaks = seq(0,20,length.out=(n+1)) 

Добавление легенды используя image.plot из fields пакета, размещение этикеток на заказ перерыв по умолчанию позиции перерыва:

library(fields) 
image.plot(r, zlim = c(0,20), 
      legend.only = TRUE, 
      col = my_col, 
      axis.args = list(at = def_breaks, labels = my_breaks)) 
Смежные вопросы