如何在三元轴图上绘制彩色图?

如何在三元轴图上绘制彩色图?

我在三维单纯形上定义了一个函数,我想将其显示为三元轴图上的彩色图。

\begin{filecontents*}{dirichlet.dat}
x y z density
0.0 0.0 1.0 0.0034743774733111514
0.0 0.25 0.75 0.015673856116184083
0.0 0.5 0.5 0.012098485065977549
0.0 0.75 0.25 0.015673856116184083
0.0 1.0 0.0 0.0034743774733111514
0.25 0.0 0.75 0.015673856116184083
0.25 0.25 0.5 0.07861618789696313
0.25 0.5 0.25 0.07861618789696313
0.25 0.75 0.0 0.015673856116184083
0.5 0.0 0.5 0.012098485065977549
0.5 0.25 0.25 0.07861618789696313
0.5 0.5 0.0 0.012098485065977549
0.75 0.0 0.25 0.015673856116184083
0.75 0.25 0.0 0.015673856116184083
1.0 0.0 0.0 0.0034743774733111514
\end{filecontents*}

\documentclass{scrartcl}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{ternary}
\usepackage{tikz}

\begin{document}

 \begin{figure}[ht]
\centering
\begin{tikzpicture}
\begin{ternaryaxis} [colorbar, colorbar style={ylabel=Density},
   ternary limits relative=false,
   xmin=0, xmax=1, xlabel = $x_1$,
   ymin=0, ymax=1, ylabel = $x_2$,
   zmin=0, zmax=1, zlabel = $x_3$,
   label style={sloped}]
  \addplot3+[only marks,
  point meta=\thisrow{density},
  nodes near coords*={\tiny{\pgfmathprintnumber\density}},
  visualization depends on={\thisrow{density} \as \density}] table {dirichlet.dat};
\end{ternaryaxis}
\end{tikzpicture}
\caption{Dirichlet Distribution}
\end{figure}

\end{document}

我这里只是绘制了点,但我想使用 pgfplots 在它们之间插入值并填充颜色图,就像smooth在 2d 轴图中使用该选项时一样。(smoothonly marks这里使用代替只是画一条连接点的线。)

在此处输入图片描述

答案1

meshsurf和 等绘图类型支持平滑插值彩色图patch。但是,这些需要输入数据点的网格(=矩阵)或一系列面片。我认为一系列三角形面片可以满足您的需求。您需要自行确定此三角剖分;pgfplots无法根据您的输入文件进行确定。

这是一个包含三个三角形的小示例。请注意,此处仅用于演示;实际上与您的输入文件无关。

在此处输入图片描述

\begin{filecontents*}{dirichlet.dat}
x y z density
0.0 0.0 1.0 0.0034743774733111514
0.0 0.25 0.75 0.015673856116184083
0.0 0.5 0.5 0.012098485065977549
0.0 0.75 0.25 0.015673856116184083
0.0 1.0 0.0 0.0034743774733111514
0.25 0.0 0.75 0.015673856116184083
0.25 0.25 0.5 0.07861618789696313
0.25 0.5 0.25 0.07861618789696313
0.25 0.75 0.0 0.015673856116184083
0.5 0.0 0.5 0.012098485065977549
0.5 0.25 0.25 0.07861618789696313
0.5 0.5 0.0 0.012098485065977549
0.75 0.0 0.25 0.015673856116184083
0.75 0.25 0.0 0.015673856116184083
1.0 0.0 0.0 0.0034743774733111514
\end{filecontents*}

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\usepgfplotslibrary{ternary}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\begin{ternaryaxis} [colorbar, colorbar style={ylabel=Density},
   ternary limits relative=false,
   xmin=0, xmax=1, xlabel = $x_1$,
   ymin=0, ymax=1, ylabel = $x_2$,
   zmin=0, zmax=1, zlabel = $x_3$,
   label style={sloped},
   point meta rel=per plot,% I added this such that my patch plot does NOT affect the second plot
   ]

    \addplot3[patch,patch type=triangle,shader=interp,point meta=\thisrow{density}] table {
    X Y Z density
    0 1 0 0
    1 0 0 0
    0.33333333 0.3333333333 0.3333333333 1
    %
    1 0 0 0
    0 0 1 0
    0.33333333 0.3333333333 0.3333333333 1
    %
    0 0 1 0
    0 1 0 0
    0.33333333 0.3333333333 0.3333333333 1
    };

  \addplot3[scatter,only marks, point meta=\thisrow{density}] table {dirichlet.dat};
\end{ternaryaxis}
\end{tikzpicture}
\end{document}

我已将示例最小化了一点;请随意重新添加靠近坐标的节点等等。

相关内容