tracciare un grafico a 3 assi come una mesh
Domanda
Ho già visto trame 3D di dati di superficie ma non so quale software potrei usare per realizzarlo.
Ho 3 serie di dati (X, Y, Z) in pratica voglio che ciascuna delle righe sul tavolo sia un punto nello spazio 3d, tutte unite come una mesh. I dati sono attualmente CSV, ma posso cambiare il formato, in quanto sono i dati che ho generato da me.
Qualcuno può aiutare
Soluzione
Se la tua x & amp; y i punti si trovano topologicamente su una griglia, quindi puoi usare MESH. Non hanno bisogno di avere una spaziatura uniforme; devono solo essere organizzati in modo tale che x (r: r + 1, c: c + 1) e y (r: r + 1, c: c + 1) definiscano un quadrilatero sulla mesh, per ogni riga r e colonna c.
Se i tuoi dati non si trovano su una griglia, ma sai quali dovrebbero essere le facce, guarda la funzione PATCH.
Se hai solo punti e non sai nulla della superficie, devi prima risolvere problema di ricostruzione della superficie . Ho usato il cocone; ci sono anche altri buoni pacchetti lì. Una volta che hai la superficie ricostruita, puoi usare PATCH per visualizzarla.
Altri suggerimenti
gnuplot o scilab
Di seguito è riportato uno script per SciLab che ho scritto qualche tempo fa. Legge in tre colonne separate da schede. Puoi facilmente cambiarlo per adattarlo alle tue esigenze, piuttosto autoesplicativo. Ecco una guida rapida per leggere / scrivere in scilab e quello Il riferimento di seguito è qui :
function plot_from_file(datafile)
//
// Make a simple x-y-z plot based on values read from a datafile.
// We assume that the datafile has three columns of floating-point
// values seperated by tabs.
// set verbose = 1 to see lots of diagnostics
verbose = 1;
// open the datafile (quit if we can't)
fid = mopen(datafile, 'r');
if (fid == -1)
error('cannot open datafile');
end
// loop over all lines in the file, reading them one at a time
num_lines = 0;
while (true)
// try to read the line ...
[num_read, val(1), val(2), val(3)] = mfscanf(fid, "%f\t%f\t%f");
if (num_read <= 0)
break
end
if (verbose > 0)
fprintf(1, 'num_lines %3d num_read %4d \n', num_lines, num_read);
end
if (num_read ~= 3)
error('didn''t read three points');
end
// okay, that line contained valid data. Store in arrays
num_lines = num_lines + 1;
x_array(num_lines) = val(1);
y_array(num_lines) = val(2);
z_array(num_lines) = val(3);
end
// now, make the plot
plot3d2(x_array, y_array, z_array);
// close the datafile
mclose(fid);
endfunction