2016-09-09 5 views
1

имеет ли кто-нибудь идею, как я могу делать несколько графиков в R с функциями графика, которые не поддерживают стандартные многострочные инструменты, такие как mfrow, layout или split.screen? В основном я пытаюсь построить эффект, сюжет, обычный сюжет и Ctree сюжет в одном графике, что-то со следующей планировкой:Проблемы с несколькими графиками в R

layout(matrix(c(1,2,3), ncol = 3)) 
layout.show(3) 

dev.off() 

Любая помощь будет хорошо. Мои попытки со стандартными функциями приведены ниже.

set.seed(pi) 
DF <- data.frame(x = c(rnorm(50, 3), rnorm(50, 10)), 
        y = c(rnorm(50, 3), rnorm(50, 10))) 

ct <- party::ctree(y ~ x, data = DF) 

mod <- lm(y ~ x, data = DF) 
eff <- effects::effect("x", mod) 

## Attempt 1 (mfrow): 
par(mfrow = c(1,3)) 

plot(eff) 
plot(DF$x, DF$y) 
plot(ct) 

par(mfrow = c(1,1)) 

dev.off() 

## Attempt 2 (layout): 
layout(matrix(c(1,2,3), ncol = 3)) 

plot(eff) 
plot(DF$x, DF$y) 
plot(ct) 

dev.off() 

## Attempt 3 (split.screen): 
split.screen(rbind(c( 0, 1/3, 0, 1), 
        c(1/3, 2/3, 0, 1), 
        c(2/3, 1, 0, 1))) 
screen(1) 
plot(ct) 

screen(2) 
plot(DF$x, DF$y) 

screen(3) 
plot(eff) 

close.screen(all.screens = TRUE) 
dev.off() 
+1

функции, кажется, использует графику сетки на основе. Посмотрите на код 'party ::: plotTree'. Поэтому вам придется комбинировать их с помощью 'viewports()'. Я не знаком с ними, но вы можете попробовать прочитать «pushViewport», «popViewport» и т. Д. –

+1

Отлично! С сеткой и некоторыми усилиями я сделал это. Я отправляю ответ. Большое спасибо. – Daniel

+1

Подает четкий определенный вопрос, проводит исследования и делится отличным ответом. Нам нужно больше таких людей, как вы, на этом сайте, молодцы. –

ответ

1

Следующий код делает правильную вещь для меня:

DF <- data.frame(x = rnorm(100), 
        y = rnorm(100)) 

ct <- party::ctree(y ~ x, data = DF) 

mod <- lm(y ~ x, data = DF) 
eff <- effects::effect("x", mod) 

p_eff <- plot(eff, main = '') 

plot.new() 
grid::grid.newpage() 
grid::pushViewport(grid::viewport(layout = grid::grid.layout(1, 3))) 

## Plot 1 (effect plot): 
grid::pushViewport(grid::viewport(layout.pos.col = 1)) 
print(p_eff, newpage = FALSE) 
grid::popViewport() 

## Plot 2 (base plot): 
grid::pushViewport(grid::viewport(layout.pos.col = 2)) 
par(fig = gridBase::gridFIG(), new = TRUE) 
plot(DF$x, DF$y) 
grid::popViewport() 

## Plot 3 (ctree plot): 
grid::pushViewport(grid::viewport(layout.pos.col = 3)) 
par(fig = gridBase::gridFIG(), new = TRUE) 
plot(ct, newpage = FALSE) 
grid::popViewport() 
Смежные вопросы