Есть ли способ нарисовать диаграмму Вороного с помощью pgfplots?

Есть ли способ нарисовать диаграмму Вороного с помощью pgfplots?

Я хочу нарисовать диаграмму Вороного с помощью pgfplots, но, к сожалению, не могу получить ее такой, какой она должна быть. Я использовал команду Matlab, чтобы получить координаты x и y, и сохранил их как dat-файл. В этом файле я сохранил координаты x в первом столбце, а координаты y — во втором столбце.

Вывод Matlab: как бы мне хотелось его получить

Вывод pgfplots: снимок того, как это выглядит сейчас

Есть ли у кого-нибудь идеи, как это может работать?

Минимальный пример кода:

\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}

Спасибо за вашу помощь!!

решение1

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

Допустим, у вас есть следующий файл «points.dat», содержащий координаты точек, для которых вы хотите нарисовать диаграмму Вороного:

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

Затем вы можете найти диаграмму Вороного с помощью Matlab или Octave следующим образом:

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

Чтобы записать это в файл, который можно построить с помощью PGFPlots, вы можете использовать

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

В PGFPlots вы можете создать график следующим образом:

\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}

Связанный контент