2013-02-26 15 views
5

Czy można wykreślić wykres na kilka urządzeń wyjściowych jednocześnie? Próbowałem:Zagnieżdżanie urządzeń wyjściowych w R?

getwd() 

pdf("level1.pdf") 
    pdf("level2.pdf") 
    png("level3.png") 

    x=1:10 
    y=1:10 
    plot(x, y) 

    dev.off() # close level3 
    dev.off() # close level2 

    a=10:20 
    b=-10:0 
    plot(a,b) 

dev.off() # close level1 

Wykres XY dotyczy tylko level3.png. (Powinienem wejść do wszystkich 3 plików)

Co dziwne, działka AB przechodzi na level2.pdf, ponieważ spodziewałem się, że zostanie zapisany na level1.pdf, ponieważ level2.pdf powinien być już zamknięty?

Odpowiedz

3

Z ggplot2 można przypisać działka obiektów do zmiennych i print je kilka razy:

library(ggplot2) 
p <- ggplot(data.frame(x=1:10, y=1:10), aes(x=x, y=y)) + geom_point() 

pdf('a.pdf') 
print(p) 
dev.off() 

png('b.png') 
print(p) 
dev.off() 

Lub z ggsave (dzięki Roland, jednak to otwiera okno obojętne na mojego systemu - Ubuntu):

ggsave('a.pdf', p) 
ggsave('b.png', p) 

Nie wiesz o „normalnych” działek używam ggplot2 kiedy tylko mogę.

+1

Funkcja 'ggsave' jest jeszcze bardziej wygodna. – Roland

4

Jest możliwe, aby mieć więcej niż jedno urządzenie otwarte w tym samym czasie, * ale tylko jedno urządzenie jest aktualnie „aktywny” a wszystkie wyjścia grafika jest wysyłane do tego urządzenia. Więc Nie, nie można wykreślić wykresu na kilka urządzeń wyjściowych naraz (równolegle/w tym samym czasie mam na myśli). tutaj opisuję kilka przydatnych funkcji klasy urządzeń, z których można korzystać.

można użyć funkcji:

  • dev.List(): t uzyskać listę otwartych urządzeń
  • dev.cur() aby uzyskać aktualny aktywny wyrób
  • dev.set() zmianę aktywnego urządzenia
  • dev.next() i dev.prev(): aby zrobić następne/poprzednie urządzenie z listy urządzeń

Na przykład:

pdf("level1.pdf") 
pdf("level2.pdf") 
png("level3.png") 
## list the devices 
dev.list() 
     pdf   pdf png:level3.png 
     2    3    4 


## current device 
dev.cur() 
png:level3.png   ## that's why The XY plot goes only into this device 
       4 
### this will go in the current device 
x=1:10 
y=1:10 
plot(x, y) 
## change the active device 
dev.set(dev.next()) 
pdf 
    2 
### close all devices 
graphics.off() 
## list the devices 
dev.list() 
NULL 

więc zastosowanie tego na przykład:

pdf("level1.pdf") 
pdf("level2.pdf") 
png("level3.png") 
dev.off() # close level3 
dev.off() # close level2 
dev.cur() 
pdf   ## plot A,B goes on this device 
    3 
Powiązane problemy