R: неожиданное обрезание в графе mfrow - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь создать мультиплот 3x3 с помощью mfrow.Расположение правильное, однако отдельные графики, похоже, содержат только часть данных.Код, который я использую для построения графика:

timing = c(10,30,50,75,100,125,200,250,300)

pdf("Figure.pdf")
par(mfrow=c(3,3))
for(t in timing) {
 dat = subset(inventory.data,Time==t)
 plot(NA, xlim=c(0,200),ylim=c(0,200), xlab = NA, ylab = NA, main =  paste("Time",t))
 points(x = dat$X, y = dat$Y, pch = 21, cex = dat$CD)
}
dev.off()

, что дает

enter image description here

Однако, если я строю графики один за другимс тем же сценарием диапазон намного больше.Например, для «Времени 300» исходный график имеет вид

enter image description here

На графиках mfrow строится только область вокруг координат (160, 70) и многографика обрезается.

Как получить все области одного графика внутри?

1 Ответ

1 голос
/ 23 сентября 2019

Это на самом деле не проблема обрезки, а проблема масштабирования.Область, изображенная на обоих графиках, составляет (0,200) х (0,200).Однако в обоих случаях так много общего, что определенные круги, которые вы можете видеть, являются просто последними, которые наносятся на график.Очевидно, что концентрические синие и зеленые круги вокруг (190, 60) - это самая простая общая черта, которую можно определить на двух графиках.Но давайте рассмотрим еще немного:

  • Темно-зеленый кружок в (70, 180)
  • Светло-зеленый кружок в (47, 2)
  • Голубой кружок в (110, 140)
  • Синий круг в (190, 160)

Похоже, что здесь происходит то, что вы взяли заговор и заставили его попасть в область менее 1/ 9 размер исходной области, но вы не изменили фактические элементы графика по-другому.Вам нужно либо увеличить размер PDF-файла, либо уменьшить размер кружков, чтобы сделать его читаемым.Вот короткий воспроизводимый пример.В будущем (особенно если вопрос достаточно важен для щедрости), приведение воспроизводимого примера (например, использование dput, как прокомментировал Parfait) помогает в тонне.

dat <- data.frame(x = runif(9*100)*200,
                  y = runif(9*100)*200,
                  size = rpois(9*100, 5)+1,
                  col = rbinom(9*100, 1, .1),
                  group = rep(1:9, 100))

set.seed(1011)

make_plot <- function(d, t, adjust = 1) {
  plot(NA, xlim=c(0,200),ylim=c(0,200), xlab = NA, ylab = NA, main =  paste("Time",t))
  sub_d <- dat[dat$group == t,]
  points(x = sub_d$x[sub_d$col == 0], y = sub_d$y[sub_d$col == 0], 
         cex = sub_d$size[sub_d$col == 0]/adjust, pch = 16, col = rgb(0,1,0,.25))
  points(x = sub_d$x[sub_d$col == 0], y = sub_d$y[sub_d$col == 0], 
         cex = sub_d$size[sub_d$col == 0]/adjust, pch = 21, col = rgb(0,1,0,.5), lwd = 2)
  points(x = sub_d$x[sub_d$col == 1], y = sub_d$y[sub_d$col == 1], 
         cex = sub_d$size[sub_d$col == 1]/adjust, pch = 16, col = rgb(0,0,1,.25))
  points(x = sub_d$x[sub_d$col == 1], y = sub_d$y[sub_d$col == 1], 
         cex = sub_d$size[sub_d$col == 1]/adjust, pch = 21, col = rgb(0,0,1,.5), lwd = 2)
}

## Big plot
t = 1
plot(-50, -50, xlim=c(0,200),ylim=c(0,200), xlab = NA, ylab = NA, main =  paste("Time",t))
sub_d <- dat[dat$group == t,]
points(x = sub_d$x[sub_d$col == 0], y = sub_d$y[sub_d$col == 0], 
       cex = sub_d$size[sub_d$col == 0], pch = 16, col = rgb(0,1,0,.25))
points(x = sub_d$x[sub_d$col == 0], y = sub_d$y[sub_d$col == 0], 
       cex = sub_d$size[sub_d$col == 0], pch = 21, col = rgb(0,1,0,.5), lwd = 2)
points(x = sub_d$x[sub_d$col == 1], y = sub_d$y[sub_d$col == 1], 
       cex = sub_d$size[sub_d$col == 1], pch = 16, col = rgb(0,0,1,.25))
points(x = sub_d$x[sub_d$col == 1], y = sub_d$y[sub_d$col == 1], 
       cex = sub_d$size[sub_d$col == 1], pch = 21, col = rgb(0,0,1,.5), lwd = 2)


## Wrong for scale
par(mfrow=c(3,3))
for(t in 1:9) {
  make_plot(dat, t)
}


## Slightly better scale
par(mfrow=c(3,3))
for(t in 1:9) {
  make_plot(dat, t, adjust = 3)
}

Создано в 2019-09-23 пакетом Представить (v0.3.0)

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