2011-03-07 2 views
3

J'ai récemment commencé à utiliser le langage R et maintenant j'utilise R pour la plupart de mes graphiques 2d. Maintenant, je veux utiliser R pour générer des tracés 3d. J'ai des données x, y, z provenant d'un outil, jusqu'à présent j'utilisais splot dans gnuplot pour générer un tracé de surface. Je veux utiliser R pour générer un tracé de surface similaire à celui que donne gnuplot. Le problème que je vois est, pour générer un graphe 3D R exige que les données soient dans le format de matrice mais mes données ne sont pas dans ce format. Ma question est, si gnuplot est capable de générer une intrigue à partir des données, pourquoi R ne peux pas le faire. Je suis sûr que je manque quelque chose, s'il vous plaît aidez-moiTracé de surface dans R similaire à celui de gnuplot

Voici l'intrigue de gnuplot

Surface plot from GNU plot

Ce sont les données

17.46 537.74 0.8 
18.36 537.74 1.6 
19.26 537.74 1.3 
19.395 537.74 1.7 
21.015 537.74 1.9 
35.46 475.26 1.2 
36.36 475.26 0.8 
37.395 475.26 0.9 
39.96 475.26 0.6 
43.56 475.26 1 
+0

Il sera utile si vous décrivez votre format de données actuel, idéalement avec un petit exemple reproductible. En outre, quelle fonction R utilisez-vous pour tracer vos données? – Andrie

+0

Il existe un certain nombre de fonctions pour tracer des surfaces. Modifiez votre question, éventuellement avec un lien ou une image du type de graphique que vous souhaitez produire. Pendant que vous attendez le téléchargement des fichiers, voyez si http://addictedtor.free.fr/graphiques/thumbs.php?sort=package a quelque chose d'utile. –

Répondre

3

Ce n'est pas un secret que je suis un fan de package raster. Il est fourni avec une méthode plot qui utilise le package rgl. Les images peuvent être assez pleines de regards.

Voici est l'exemple de ?raster::plot3D enter image description here

EDIT

Voici un exemple de la façon de tracer une surface à l'aide d'une matrice à trois colonnes. Cet exemple ressemble à un piège mortel dans Mortal Combat. Si vous cherchez un lissage du noyau, alors cela mérite sa propre question.

library(rgl) 
library(raster) 
x <- sample(-500:500, 1000, replace = TRUE) 
y <- sample(-500:500, 1000, replace = TRUE) 
z <- rnorm(500, 10, 20) 
df <- cbind(x, y, z) 

rst <- raster(ncols = 100, nrows = 100, xmn = -100, xmx = 100, ymn = -100, ymx = 100) 
rst2 <- rasterize(x = df[,1:2], y = rst, df[, 3]) 
plot3D(rst2) 

enter image description here

+0

Cela semble très bien, espérons qu'il ne nécessite pas de données sous forme de matrice. Je vais essayer cela, j'ai un problème avec le paquet rgl (http://stackoverflow.com/questions/5166175/help-in-using-rgl-package), je ne sais pas si cela fonctionne pour moi. Existe-t-il un autre package pour générer des tracés de surface lorsque les données ne sont pas au format matriciel? – SAN

+0

Vous pouvez utiliser 'rgl :: surface3d' directement. Il accepte le type de données que vous décrivez dans votre question (matrice à trois colonnes). –

+0

surface3d nécessite également une matrice z pour chaque point de la grille, je reçois cette erreur avec les données ci-dessus y longueur! = X lignes * z cols – SAN

1

Vous pouvez utiliser la fonction outer pour générer la matrice d'une fonction:

fn3d <- function(x,y) x^2-y^2 
persp(outer(seq(-10,10,length=30),seq(-10,10,length=30),fn3d)) 

Regardez ?persp, il y a beaucoup d'exemples là-bas. Si vous voulez un tracé 3D interactif, envisagez d'installer le package rgl.

+0

Le générateur de données est un outil de simulation, je n'ai pas de fonction – SAN

+0

@Aki Vous n'avez ici que quelques points de données. Il semble que le reste de l'intrigue est rempli d'un plan interpolé dans gnuplot. Vous pourriez vouloir considérer si c'est une manière appropriée de représenter les données. – James

+0

Le nombre réel de points est en millions, par exemple, j'ai pris quelques points de données – SAN

0

l'armature et les fonctions levelplot dans le paquet de réseau utilisent un format de données comme gnuplot fait plutôt que requireing une matrice.

Questions connexes