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?

¿Fue útil?

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

¿Ha mirado usando vtk ? Si tiene Matlab, entonces debería poder usar plot3d o surf con meshgrid y griddata para generar una superficie 3D parcelas o parche según lo sugerido por Mr . Fooz .

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top