2017-01-02 2 views
1

J'utilise plot3d() de rgl pour créer des diagrammes de dispersion 3D, en utilisant trois colonnes, d'échantillons dans un bloc de données. En outre, j'utilise une quatrième colonne colorby de mon cadre de données (où chaque échantillon prend des valeurs, disons, 10, 11, 12 en tant que facteurs/niveaux) pour colorer les points dans le tracé.R plot3d coloriage

Lorsque vous utilisez plot() pour faire des parcelles 2D, j'ai mis palette(rainbow(3)) puis col = colorby au sein plot() suivi par legend(). L'intrigue, les couleurs et la légende fonctionnent bien.

Cependant, lorsque je répète la dernière partie pour plot3d(), le coloriage se mélange et les mêmes couleurs ne sont pas affectées aux mêmes niveaux que dans plot(). De plus, si j'utilise legend3d("topright", legend = levels(colorby), col = rainbow(3)) pour créer une légende, elle ressemble à la légende 2D, mais la couleur est clairement fausse dans le tracé 3D.

Où est-ce que je me trompe? Merci d'avance.

Répondre

1

Cela semble correct pour moi:

df <- data.frame(x=1:9, y=9:1, z=101:109, colorby=gl(3,3)) 
palette(rainbow(3)) 
plot(x~y, df, col = df$colorby) 
library(rgl) 
with(df, plot3d(x,y,z, col = colorby)) 
legend3d("topright", legend = levels(df$colorby), col = levels(df$colorby), pch=19) 
+0

Cela a bien fonctionné en effet. J'ai remarqué que pour mon code 'legend3d()', j'ai utilisé 'col = 1: length (df $ colorby)' qui donne une légende _different_ et _incorrect_ au lieu d'utiliser 'col = levels (df $ colorby)'. Une idée pourquoi? – user334263

+0

Ce sont deux vecteurs différents. Pourquoi voudriez-vous qu'ils soient pareils? Le vôtre donne 1: 9, lukeA donne c ("1", "2", "3"). Le fait que le second est un vecteur de caractères n'a pas d'importance, le fait qu'ils contiennent des valeurs différentes le fait. – user2554330