Как изобразить изображение вне области графика с номиналом (xpd = T)? - PullRequest
0 голосов
/ 28 мая 2018

В R я пытаюсь построить изображение вне области графика (как легенда).Тем не менее, кажется, что par(xpd=T) или par(xpd=NA) просто не работают.

Вот минимальный воспроизводимый пример из ошибки, приводящий следующий график.

par(mar=c(4,4,4,4),xpd=F)
plot(1:2,1:2)
x <- c(2,2.1)
y <- seq(1.1,1.9,len=10)
m <- matrix(seq(0,1,len=10),ncol=10,nrow=2,byrow=T)
par(xpd=T)
image(x-.2,y,m,add=T)
image(x+.05,y,m,add=T)
par(xpd=NA)
image(x-.2,y,m,add=T)
image(x+.05,y,m,add=T)

R plot image bug

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

xpd

Логическое значение или NA.Если ЛОЖЬ, все черчение обрезается до области графика, если ИСТИНА, все черчение обрезается до области рисунка, а если НЕТ, все черчение обрезается до области устройства.См. Также клип.

Это ошибка или я что-то не так делаю?

Я использую версию R 3.3.3 (2017-03-06) - "Другое каноэ ", платформа: x86_64-pc-linux-gnu (64-разрядная версия), с RStudio версии 1.1.447, в Debian Stretch.

1 Ответ

0 голосов
/ 29 мая 2018

Честно говоря, у меня нет прямого ответа на ваш вопрос.Я почти уверен, что это связано с image(), потому что xpd = TRUE отлично работает для других функций, таких как text().

Вот два более или менее хакерских решения, которые работали для меня с вашим MWE и, надеюсь, помогутс вашим фактическим участком:

x <- c(2, 2.1)
y <- seq(1.1, 1.9, len = 10)
m <- matrix(seq(0, 1, len = 10),
            ncol = 10, nrow = 2, byrow = TRUE)

# Solution 1: useRaster = TRUE
par(mar = c(4, 4, 4, 4), xpd = TRUE)
plot(1:2, 1:2)
image(x + .05, y, m, add = TRUE, useRaster = TRUE)
# text(x + .05, y, "foo")

# Solution 2: grid.clip() plus image() twice
par(mar = c(4, 4, 4, 4), xpd = TRUE)
plot(1:2, 1:2)
image(x + .05, y, m, add = TRUE)
grid::grid.clip()
image(x + .05, y, m, add = TRUE)
...