traçar um gráfico de três eixos como uma malha
Pergunta
Eu vi lotes de superfície 3D de dados antes, mas eu não sei o que software eu poderia usar para fazê-lo.
Eu tenho 3 séries de dados (X, Y, Z), basicamente, eu quero cada uma das linhas na tabela para ser um ponto no espaço 3D, todos unidos como uma malha. Os dados são actualmente CSV, mas eu posso mudar o formato, como é dados i gerados mim mesmo.
alguém pode ajudar
Solução
Se seus x e y pontos mentir topologicamente em uma grade, então você pode usar MESH. Eles não precisam ter o mesmo espaçamento; apenas precisam de ser organizado de modo que x (r: r + 1, c: c + 1) e y (r: r + 1, c: c + 1) definir um quadrilátero no seu malha, para cada linha r e coluna c.
Se os dados não mentem em uma grade, mas você sabe o que os rostos deve ser, olhada na função PATCH.
Se você só tem pontos e você não sabe nada sobre a superfície, você precisa primeiro resolver o problema reconstrução da superfície . Eu tenho COCONE usado; existem outros pacotes bons lá também. Depois de ter a superfície reconstruída, então você pode usar PATCH para exibi-lo.
Outras dicas
Você olhou para usando vtk ? Se você tem Matlab, então você deve ser capaz de usar plot3d ou de surf com meshgrid e gridData ??em> para gerar superfície 3D parcelas ou remendo como sugerido por Sr. . Fooz .
gnuplot ou scilab
Abaixo está um script para SciLab que eu escrevi algum tempo atrás. Lê-se em três colunas separadas por separadores. Você pode facilmente mudar isso para atender às suas necessidades, bastante auto-explicativas. Aqui está um guia rápido para leitura / escrita em scilab eo eu referência abaixo é aqui :
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