Подтвердить что ты не робот

Пытаясь удалить все поля, чтобы сюжетная область включала всю графику

Я пытаюсь удалить все поля и "область фигуры" графика в R, так что область графика содержит все графическое устройство. Я думал, что код ниже сделает это, но вокруг моего графика все еще есть граница (шире слева/внизу, тоньше сверху/справа). Спасибо

par(oma=c(0, 0, 0, 0))
par(mar=c(0, 0, 0, 0))
par(plt=c(0, 1, 0, 1))

Думаю, я бы добавил фотографию, чтобы показать свой прогресс. Xaxs и yaxs удаляли почти все границы сверху и справа - по-прежнему есть граница слева и внизу.

R plot

Соответствующая часть моего script приведена ниже.

png("Test.png", 
     width = 256, height = 256,
     units = "px", pointsize = 6.4, 
     bg = "black", res = NA)

par(mar=c(0, 0, 0, 0), xaxs='i', yaxs='i')


smoothScatter(lhb$px, lhb$pz, nrpoints=0, xlim=c(-3,3), ylim=c(0,5), 
    main="", xlab="", ylab="", axes=FALSE, 
    colramp=colorRampPalette(c("black", "#202020", "#736AFF", "cyan", "yellow", "#F87431", "#FF7F00", "red", "#7E2217"))
    )

segments(.83, 1.597, .83, 3.436, col = par("fg"), lty = par("lty"), lwd = par("lwd"))
segments(-.83, 1.597, -.83, 3.436, col = par("fg"), lty = par("lty"), lwd = par("lwd"))
segments(-.83, 3.436, .83, 3.436, col = par("fg"), lty = par("lty"), lwd = par("lwd"))
segments(-.83, 1.597, .83, 1.597, col = par("fg"), lty = par("lty"), lwd = par("lwd"))


dev.off()
4b9b3361

Ответ 1

Одна проблема принципиально не получается, что делает plt. Из ?par имеем:

 ‘plt’ A vector of the form ‘c(x1, x2, y1, y2)’ giving the
      coordinates of the plot region as fractions of the current
      figure region.

Итак, ваша область сюжета имеет нулевой размер, если вы делаете par(plt=c(1, 1, 1, 1)), так что, похоже, это не путь. Это связано с тем, что область фигуры содержит область сюжета.

Этот сюжет, кажется, охватывает весь регион, без полей:

op <- par(mar = rep(0, 4))
plot(1:10)
par(op)

он так хорошо ее охватывает, что вы не можете видеть оси или поле:

full region covered

Это предполагает значение по умолчанию для 0 внешнего поля (oma). Это то, что вы искали?

Мы видим, что только корректировка полей графика, как и выше, мы также изменяем параметр plt как побочный эффект:

> par("plt")
[1] 0.1173174 0.9399106 0.1457273 0.8828467
> op <- par(mar = rep(0, 4))
> par("plt")
[1] 0 1 0 1
> par(op)
> par("plt")
[1] 0.1173174 0.9399106 0.1457273 0.8828467

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

Конечно, по-прежнему имеется немного внутренней прокладки, которая обеспечивает, чтобы диапазоны осей были немного большими, чем диапазон данных в координатах x и y. Но вы можете контролировать это с помощью xaxs и yaxs --- см. ?par

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

set.seed(1)
dat <- matrix(rnorm(100*100), ncol = 100, nrow = 100)

layout(matrix(1:2, ncol = 2))
image(dat)
op <- par(mar = rep(0, 4))
image(dat)
par(op)
layout(1)

что дает для сравнения:

comparison of default and no margins respectively

и показывает только область полного графика:

full plot region covered

Ответ 2

Попробуйте установить параметр области "xpd" в области NA (привязанный к устройству).

par (xpd = NA)