Existe uma maneira de desenhar um diagrama de Voronoi com pgfplots?

Existe uma maneira de desenhar um diagrama de Voronoi com pgfplots?

Quero desenhar um diagrama de voronoi com pgfplots, mas infelizmente não consigo fazer como deveria. Usei o comando Matlab para obter as coordenadas xey e salvei-as como um arquivo dat. Nesse arquivo armazenei as coordenadas x na primeira coluna e as coordenadas y na segunda coluna.

Saída do Matlab: Como eu gostaria de tê-lo

Saída pgfplots: Instantâneo de como está agora

Alguém tem uma ideia de como isso poderia funcionar?

Exemplo mínimo do código:

\documentclass{standalone}

\usepackage{amsmath,amsfonts,amssymb} 
\usepackage{mathtools} 
\usepackage[ngerman]{babel} 
\usepackage[utf8]{inputenc} 
\usepackage{graphicx} 
\usepackage[svgnames]{xcolor} 
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\usepackage{tikz} 
\usetikzlibrary{positioning,fit,calc,shapes,arrows,external,3d,patterns,spy}

\usepackage{filecontents}

\begin{document}

\begin{filecontents*}{data.dat}
  -7.9265104e+00   3.6503989e-01
   4.3133971e-01   9.4062409e-01
  -7.9265104e+00   3.6503989e-01
   6.3976919e-02   5.4947497e-01
   6.3976919e-02   5.4947497e-01
   3.0293735e-01   6.5037024e-01
   3.6748619e-01   9.5786833e-02
   6.3976919e-02   5.4947497e-01
   3.0293735e-01   6.5037024e-01
   4.0645496e-01   8.2958752e-01
   4.9066479e-01   4.4410036e-01
   3.0293735e-01   6.5037024e-01
   3.6748619e-01   9.5786833e-02
   4.9244296e-01   2.3488102e-01
   4.9244296e-01   2.3488102e-01
   4.9066479e-01   4.4410036e-01
   4.9066479e-01   4.4410036e-01
   7.3082954e-01   5.1825327e-01
   1.8829507e+00   1.7053562e-01
   4.9244296e-01   2.3488102e-01
   4.3133971e-01   9.4062409e-01
   8.7230061e-01   2.0371867e+00
   4.0645496e-01   8.2958752e-01
   4.3133971e-01   9.4062409e-01
   6.6251849e-01   6.4842135e-01
   4.0645496e-01   8.2958752e-01
   6.9696115e-01   6.8938388e-01
   8.7230061e-01   2.0371867e+00
   7.3082954e-01   5.1825327e-01
   6.6251849e-01   6.4842135e-01
   1.8829507e+00   1.7053562e-01
   7.3082954e-01   5.1825327e-01
   6.6251849e-01   6.4842135e-01
   6.9696115e-01   6.8938388e-01
  -7.9265104e+00   3.6503989e-01
  -1.7371176e+01   8.6111447e-02
   3.6748619e-01   9.5786833e-02
  -6.0998602e-02  -1.3709259e+00
   1.8829507e+00   1.7053562e-01
   4.4291165e+00  -2.9045575e-01
   8.7230061e-01   2.0371867e+00
   1.8287612e+00   4.5227847e+00
   6.9696115e-01   6.8938388e-01
   1.9370861e+00   1.3452721e+00
\end{filecontents*}

\begin{tikzpicture}
\begin{axis}[x=3cm, y=3cm, z=0cm, view={0}{90}]
\addplot3 [color=blue, samples y=0] file {voronoi.dat}; 
\end{axis}
\end{tikzpicture}

\end{document}

Obrigado pela ajuda!!

Responder1

Você precisa adicionar uma linha vazia entre os segmentos de linha individuais do diagrama de Voronoi para que os segmentos de linha não fiquem conectados.

Digamos que você tenha o seguinte arquivo 'points.dat' contendo as coordenadas dos pontos para os quais deseja desenhar o diagrama de Voronoi:

1   4
4   1
2   6
3   5
4   3
6   2

Então você pode encontrar o diagrama de Voronoi usando Matlab ou Octave assim:

points = dlmread('points.dat');
[vx, vy] = voronoi(points(:,1), points(:,2));

Para gravar isso em um arquivo que pode ser plotado usando PGFPlots, você pode usar

fid = fopen('voronoi.dat', 'w');
fprintf(fid, '%f %f\n%f %f\n\n', [vx(:), vy(:)]');
fclose(fid);

No PGFPlots, você pode criar o gráfico assim:

\documentclass{article}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
\begin{axis}[
    axis equal image
]
\addplot [only marks, red] table {points.dat};
\addplot [no markers, update limits=false] table {voronoi.dat};
\end{axis}
\end{tikzpicture}
\end{document}

informação relacionada