trazar un gráfico de 3 ejes como una malla
Pregunta
He visto gráficos de superficie en 3D de datos antes, pero no sé qué software podría usar para hacerlo.
Tengo 3 series de datos (X, Y, Z) básicamente quiero que cada una de las filas de la tabla sea un punto en el espacio 3d, todos unidos como una malla. Los datos son actualmente csv, pero puedo cambiar el formato, ya que son datos que generé yo mismo.
¿Alguien puede ayudar?
Solución
Si su x & amp; Los puntos y se encuentran topológicamente en una cuadrícula, entonces puede usar MESH. No necesitan tener siquiera espaciado; solo necesitan estar organizados para que x (r: r + 1, c: c + 1) ey (r: r + 1, c: c + 1) definan un cuadrilátero en su malla, para cada fila r y columna c.
Si sus datos no se encuentran en una cuadrícula, pero sabe cuáles deberían ser las caras, mire la función PATCH.
Si solo tiene puntos y no sabe nada sobre la superficie, primero debe resolver el problema de reconstrucción de superficie . He usado cocone; Hay otros buenos paquetes allí también. Una vez que tenga la superficie reconstruida, puede usar PATCH para mostrarla.
Otros consejos
gnuplot o scilab
A continuación hay un script para SciLab que escribí hace un tiempo. Se lee en tres columnas separadas por pestañas. Puede cambiar esto fácilmente para que se ajuste a sus necesidades, se explica por sí mismo. Aquí hay una guía rápida para lectura / escritura en scilab y el La referencia a continuación es aquí :
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