R - самый простой способ переместить легенду при построении растра

Мне нужно построить растровые файлы.

На моем выходном изображении числа в легенде иногда не видны, особенно когда я разделяю окно графика на два или более столбца (например: par (mfrow = c (1,2))).

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

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

library('raster')
data(volcano)
r <- raster(volcano)
# Trying to draw default legend below raster plot
plot(r, legend=F)
# Now trying to draw legend. Default is okay for me, I want to move it below only:
plot(r, legend.only=TRUE, legend.args=list("bottom", text='My values [m^3]'))

К сожалению, мой код не работает (кажется, что параметр «нижний» не используется).

Чего мне нужно достичь


person matandked    schedule 07.12.2015    source источник
comment
Приходилось ли вам каким-либо образом изменить цвет текста легенды?   -  person I Del Toro    schedule 29.02.2016
comment
Нет, мне не нужно менять цвет текста легенды.   -  person matandked    schedule 09.03.2016


Ответы (3)


tl;dr

Попробуйте передать horizontal = TRUE вызову функции plot().

library('raster')

data(volcano)
r <- raster(volcano)

plot(r, legend.only=TRUE, horizontal = TRUE, legend.args = list(text='My values [m^3]'))

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

Твики

Теперь вы можете передать side= или line= аргументы в список legend.args, чтобы указать, где вы хотите разместить метку легенды (по умолчанию side = 3 и line = 0). Например, вы можете поместить текст «Мои значения [m ^ 3]» под легендой, используя side = 1, и расположить его немного дальше от легенды (а не поверх нее!), Используя line = 2.

plot(r, legend.only=TRUE, horizontal = TRUE, 
        legend.args = list(text='My values [m^3]', side = 1, line = 2))

Расширенные настройки

Если вы хотите нанести легенду где-нибудь, кроме правой или нижней части графика, вам нужно сначала построить свой растр с помощью axes = FALSE, а затем построить его снова, но передавая в качестве аргументов legend.only = TRUE и smallplot= c(xleft, xright, ybottom, ytop), чтобы указать, где в области построения. нарисовать цветную рамку.

Фон

Хитрость в том, что список legend.args передается в функцию mtext(), поэтому стандартный способ определения местоположения легенды в базовом R построении с помощью функции legend() и использования аргумента x= (например, «снизу», «снизу справа») недоступен. .

Вы можете подумать, что список axis.args может помочь, поскольку он также (возможно, парадоксально) определяет, как отрисовывается легенда. Список axis.args передается в функцию axis() для рисования некоторых элементов легенды, а функция axis() имеет аргумент side=, который устанавливает, с какой стороны графика будет отображаться ось (в нашем случае легенда)! Но нет, аргумент side= устанавливается другими способами во время рисования растрового графика.

Что это за средства, спросите вы? Это аргумент horizontal=!

Аргумент horizontal= можно передать вызову plot(), чтобы указать, хотите ли вы, чтобы растровая легенда располагалась справа от графика (по умолчанию horizontal = FALSE устанавливает для аргумента side= значение 4 в вызове функции axis(), которая рисует легенду) или нижняя часть графика (когда horizontal = TRUE, который устанавливает аргумент side= в 1 в вызове функции `axis (), которая рисует легенду)

person mikoontz    schedule 07.05.2018

Вот способ использования rasterVis:

library(rasterVis)
levelplot(r, margin=FALSE, colorkey=list(space="bottom"), par.settings = RdBuTheme())

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

person johannes    schedule 07.12.2015
comment
Есть ли способ изменить цвет текста легенды вне rasterVis? Я использую smallplot, чтобы поместить легенду в свой сюжет - person I Del Toro; 29.02.2016

Или попробуйте spplot, который также использует пакет lattice:

spplot(r, scales = list(draw = TRUE), colorkey = list(space = "bottom"))
person Edzer Pebesma    schedule 08.12.2015
comment
Это работает, но я также добавляю к своему растру несколько шейп-файлов, например: plot(punktyPom,add=T, lwd=c(1), lty=c(1)) и spplot, похоже, не работают должным образом - person matandked; 21.06.2017