Как переместить легенду вертикальной цветной полосы в image.plot - PullRequest
0 голосов
/ 10 января 2019

Используя image.plot из fields в R, мне нужно немного переместить вертикальную легенду цвета вправо, чтобы разместить вторую ось y с правой стороны графика. Вот воспроизводимый пример того, о чем я говорю:

x <- seq(0, 1, 0.1)
y <- x
n <- length(x)
z <- matrix(runif(n^2), n, n)
xyzlist <- list(x, y, z)
image.plot(x,y,z)
yaxis2 <- y^2
axis(4, at = y, labels = yaxis2)

pic

Итак, вы видите, как новые метки оси врезаются в легенду. Как переместить легенду так, чтобы она не врезалась в метки новой оси?

1 Ответ

0 голосов
/ 10 января 2019

Вы можете поиграть (в некоторой степени) с размером и расположением легенды, используя аргумент smallplot функции.

В вашем примере вы можете использовать следующий код:

library(fields)
x <- seq(0, 1, 0.1)
y <- x
n <- length(x)
z <- matrix(runif(n^2), n, n)
xyzlist <- list(x, y, z)
yaxis2 <- y^2

### code added: left, right, bottom, top
image.plot(x,y,z, smallplot = c(.89, .94, .2, .8)) 
axis(4, at = y, labels = yaxis2)

Это дает следующий график:

enter image description here

Конечно, вы можете изменить легенду дальше, сделать ее меньше, короче и т. Д.

Пожалуйста, дайте мне знать, хотите ли вы этого.

Альтернативный

Альтернатива - нарисовать сюжет 2 раза. Первый вызов генерирует график без легенды (потому что он не указан правильно, и это приводит к ошибке). Затем ось строится (с регулировкой линии, которая может быть разной в зависимости от размера окна печати). В-третьих, и наконец, легенда рисуется (дальше влево, чем в предыдущем сюжете с ошибкой).

image.plot(x,y,z, smallplot = c(.85, .86, 1, .8)) 
axis(4, at = y, labels = yaxis2, line = -6)
image.plot(x,y,z, smallplot = c(.89, .92, .2, .8), legend.only = TRUE)
...