пытаясь удалить все поля так, чтобы область графика включала весь график - PullRequest
12 голосов
/ 14 апреля 2011

Я пытаюсь удалить все поля и «область рисунка» графика в 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

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

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()

Ответы [ 2 ]

15 голосов
/ 14 апреля 2011

Одна проблема принципиально не в том, что делает 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

Обновление: Поскольку ОП показала вид фигуры, которую они пытаются создать без наценкиЯ могу привести воспроизводимый пример:

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

1 голос
/ 16 апреля 2011

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

номинал (xpd = NA)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...