2011-12-13 3 views
3

Я ищу способы добавить точки к трем различным графикам параллельно.Как добавить точки на два участка параллельно? (in R)

У меня есть три диаграммы рассеяния, названные s3d1, s3d2 и s3d3 в одном окне

layout(matrix(c(1,2,1,3),2, 2, byrow = TRUE)) 
s3d1<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20) 
s3d2<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20) 
s3d3<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20) 

Если я пытаюсь добавить точки s3d1,

s3d1$points3d(mtcars[,3],mtcars[,4],mtcars[,5],col="red") 

Точки пойдет s3d3 но не s3d1. Что мне не хватает?

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

Update:

Пробовал par() функцию, а

par(fig=c(0,0.65,0,1), new=TRUE) 
s3d1<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20) 
par(fig=c(0.7,1,0.5,1), new=TRUE) 
s3d2<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20) 
par(fig=c(0,0.65,0,1), new=TRUE) 
s3d1$points3d(mtcars[,3],mtcars[,4],mtcars[,5],col="red") 

s3d1$points3d не добавляет новых точек к s3d1 (и даже не s3d2). Есть идеи ?

ответ

2

Если вы посмотрите на источник points3d(), просто попробуй выполнить s3d1$points3d, вы увидите, что он просто добавляет точки к существующему сюжету, который предположительно уже открыт. Другими словами, точки/сюжет не сохраняются в объектах s3d1,2,3, а просто информация об трансформации, необходимая для отображения в разных представлениях.

Су, чтобы делать то, что вы пытаетесь сделать, вам просто нужно будет использовать обычные команды графического устройства. Например, dev.new откроет новое окно графика, и dev.set может переключаться между активными. Вы могли бы сделать что-то вроде:

dev.new(); h1=dev.cur() 
s3d1<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20) 
dev.new(); h2=dev.cur() 
s3d2<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20) 
dev.new(); h3=dev.cur() 
s3d3<-scatterplot3d(mtcars[,3],mtcars[,4],mtcars[,5],main="common",pch=20) 
dev.set(h1) 
s3d1$points3d(mtcars[,3],mtcars[,4],mtcars[,5],col="red") 

проверить также из ?dev.new для получения дополнительной информации.

+0

Извините, я должен был сообщить об этом раньше: На самом деле, я рисую все три в одном окне, используя layout(). Итак, при использовании dev.new() открывается новое окно, которое нежелательно – 384X21

+0

Ohhhh ... спасибо за разъяснение! В вызове 'points3d' используется какая-либо ячейка, на которой была построена последняя, ​​которая является нижней правой. Я считаю, что лучшим решением является просто с нуля каждый цикл. Удачи! –

+0

@ user1029725 Да, я нашел «макет» наиболее полезным, когда мне просто нужно быстро выкинуть некоторые сюжеты. Для более пользовательских подзаговоров я всегда использовал 'par (mfrow)' и т. Д. –