постройте 3-осевой график в виде сетки
Вопрос
Я уже видел 3D-графики поверхности данных раньше, но я не знаю, какое программное обеспечение я мог бы использовать для их создания.
У меня есть 3 серии данных (X, Y, Z) в принципе, я хочу, чтобы каждая из строк в таблице была точкой в трехмерном пространстве, все они были соединены в виде сетки.В настоящее время данные находятся в формате csv, но я могу изменить формат, так как это данные, которые я сгенерировал сам.
Кто-нибудь может помочь
Решение
Если ваши точки x и y топологически лежат на сетке, то вы можете использовать MESH .Им не нужно иметь равномерных интервалов;их просто нужно организовать так, чтобы x (r: r + 1, c: c + 1) и y (r: r + 1, c: c + 1) определяли четырехугольник в вашей сетке для каждой строки r и столбца c.
Если ваши данные не лежат на сетке, но вы знаете, какими должны быть грани, посмотрите на функцию PATCH (ИСПРАВЛЕНИЕ).
Если у вас есть только точки и вы ничего не знаете о поверхности, вам нужно сначала решить реконструкция поверхности проблема.Я использовал cocone;там есть и другие хорошие пакеты.Как только у вас будет восстановленная поверхность, вы сможете использовать PATCH для ее отображения.
Другие советы
gnuplot или scilab ( скалабор )
Ниже приведен скрипт для 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