2017-01-23 2 views
1

J'essaie de mettre plusieurs légendes d'arrière-plan sur un graphique rgl (dans mon exemple réel, un pour les lignes et un pour les points), et je voudrais qu'ils soient dans différents coins de l'écran. Il semble que le comportement par défaut de rgl consiste à remplacer une ancienne légende lorsqu'un nouveau est appelé. Le code suivant, modifié à partir du rgllegend3d exemple, illustre ceci:Plusieurs tracés d'arrière-plan 2D dans RGL

library(rgl) 
x <- rnorm(100) 
y <- rnorm(100) 
z <- rnorm(100) 
open3d() 
par3d(windowRect = c(100, 100, 612, 612)) 
plot3d(x, y, z) 
legend3d(x = 0, y = 0, xjust = 0, yjust = 0, legend = c("2D", "3D"), pch = c(1, 16)) 
legend3d(x = 1, y = 0, xjust = 1, yjust = 0, legend = c("2D", "3D"), pch = c(1, 16)) 

Que puis-je faire pour contourner ce problème et obtenir plusieurs graphiques 2D apparaissent?

Répondre

2

legend3d() fait un arrière-plan en utilisant legend() après plot(). Donc, il ne peut pas faire plusieurs légendes. Il serait préférable d'utiliser bgplot3d().

open3d() 
par3d(windowRect = c(100, 100, 612, 612)) 

plot3d(x, y, z) 

bgplot3d({ 
    par(mar = c(0, 0, 0, 0)) 
    plot(0, 0, type = "n", xlim = 0:1, ylim = 0:1, xaxs = "i", 
     yaxs = "i", axes = FALSE, bty = "n") 
    legend(x = 0, y = 0, xjust = 0, yjust = 0, legend = c("2D", "3D"), pch = c(1, 16)) 
    legend(x = 1, y = 0, xjust = 1, yjust = 0, legend = c("2D", "3D"), pch = c(1, 16)) 
}) 

enter image description here