построить 3-осевой график в виде сетки - PullRequest
0 голосов
/ 06 ноября 2008

Я уже видел трехмерные графики данных, но я не знаю, какое программное обеспечение я мог бы использовать для его создания.

У меня есть 3 серии данных (X, Y, Z), в основном я хочу, чтобы каждая строка в таблице была точкой в ​​трехмерном пространстве, и все они были объединены в сетку. Данные в настоящее время CSV, но я могу изменить формат, так как это данные, которые я сам сгенерировал.

Может кто-нибудь помочь

Ответы [ 3 ]

5 голосов
/ 06 ноября 2008

Если ваши точки x & y топологически лежат на сетке, то вы можете использовать MESH. Они не должны иметь даже расстояние; они просто должны быть организованы так, чтобы x (r: r + 1, c: c + 1) и y (r: r + 1, c: c + 1) определяли четырехугольник на вашей сетке для каждой строки r и столбца с.

Если ваши данные не лежат в сетке, но вы знаете, какими должны быть грани, посмотрите на функцию PATCH.

Если у вас есть только точки и вы ничего не знаете о поверхности, вам сначала нужно решить проблему реконструкция поверхности . Я использовал кокон; там есть и другие хорошие пакеты. Если у вас есть восстановленная поверхность, вы можете использовать PATCH для ее отображения.

1 голос
/ 06 ноября 2008

Вы смотрели на использование vtk ? Если у вас есть Matlab, то вы можете использовать plot3d или surf с meshgrid и griddata для создания трехмерных участков поверхности или патч в соответствии с предложением г-н. Fooz .

0 голосов
/ 06 ноября 2008

Гнуплот или Скайлаб

Ниже приведен скрипт для SciLab, который я написал некоторое время назад. Он читается в трех столбцах, разделенных вкладками. Вы можете легко изменить это, чтобы соответствовать вашим потребностям, довольно очевидно. Вот краткое руководство по чтению / письму в scilab , и ниже я приведу ссылку :

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
...