File Exchange

image thumbnail


version (917 Bytes) by Tim
Write 3D matrices to VTK files viewable with Paraview.


Updated 24 Mar 2009

No License

This writes a 3D matrix to a VTK file. An old text-based format is used because it is easy to write to. This may result in very large file sizes.

The matrix is normalised, kind of. Not sure why I did that; it might not be needed. The code is very short so feel free to experiment!


WriteToVTK(matrix, filename)


m = reshape(magic(6), [3 3 4]);
WriteToVTK(m, 'magic.vtk');

Cite As

Tim (2020). WriteToVTK (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (8)


thanks for your code.
I met a problem in useing it
v = round(100 .* v(:) ./ mx);

The data format of I used is decimal,so I modified the code.
v = 100 .* v(:) ./ 100;
But the result is not correct.
Could you give some help?

jie wang

Thanks for your code, it is really helpful.

Top !


Actually, i just modified the file to be more general to scalar data, using signed, floating points. No need to normalize, no need to have positive values :

For that, one can simply change " SCALARS blah char "
to "SCALARS blah float".
Then instead of :
fwrite(fid, num2str(v'));

use, for instance with a precision of 3 digits :

which will add only one blank space between each value whether it is positive or negative. (fwrite would actually add 2 blanks if the value is positive, fprintf understands the \040 ascii code as it's supposed to).

So, finally, we'd have :

fwrite(fid, ['# vtk DataFile Version 2.0' nl 'Volume example' nl 'ASCII' nl ...
num2str(N) ' ' num2str(M) ' ' num2str(O) nl 'ASPECT_RATIO 1 1 1' nl ...
'ORIGIN 0 0 0' nl 'POINT_DATA ' ...
num2str(N*M*O) nl 'SCALARS matlab_scalars float 1' nl 'LOOKUP_TABLE default' nl]);

for z = 1:O
% Get this layer.
v = matrix(:, :, z)';
% Scale it. This assumes there are no negative numbers. I'm not sure
% this is actually necessary.
v = v(:)';
% Write the values as text numbers.
% Newline.
fwrite(fid, nl);


Tested with Paraview 4.1. Worked like charm.


According to your code, one should be careful as for the X and Y dimension. VTK structured data have x coordinates increasing faster, then y, and z.
By doing v = matrix(:, :, z);, the Y coordinates (rows) increase faster. Thus the VTK reader will assimilate the rows as the X dimension. So unless we transpose the matrix before sending it to writeToVTK, the VTK reader (paraview) will show us a transposed version of our arrays, X/Y -> Y/X. Am i correct ?

Good for export to VTK of matrices only.


Awesome! Great for viewing 3-D level-set data...and then making quick stereo movies in paraview..thanks Tim.

MATLAB Release Compatibility
Created with R2008a
Compatible with any release
Platform Compatibility
Windows macOS Linux