如何创建复杂高斯联合 PDF 图?(示例图)

如何创建复杂高斯联合 PDF 图?(示例图)

我本质上是在尝试尽可能接近地复制这个数字:

在此处输入图片描述

特别是右边带有红色曲线的那个。

这些图显示了第一幅图中通过取 2 个高斯 PDF $\Theta_i$、$\Theta_j$ 的幂的乘积生成的曲线。这需要 2 个主要步骤,第一部分是绘制红色曲线、点和标签,我可以在 metapost 中轻松完成。但第二部分需要将 2 个高斯 PDF 的组合密度 PDF 绘制为颜色渐变,我不认为 metapost 可以做到这一点。然后我尝试使用 tkiz 来绘制它,但 A) 我对它不是很熟练,因为我倾向于更频繁地使用 metapost,并且 B) 在 tkiz 上为背景定义自定义颜色阴影似乎真的很难。

跟随先前的答案我设法得到了一个高斯椭圆体,其平均值处有一个黑点,但任何进一步的操作都会开始破坏图形。例如,尝试添加第二个高斯椭圆体会将其渲染到第一个椭圆体之上并将其遮挡。此外,在 tkiz 中定义多维函数似乎很棘手(对于 metapost 也是如此)。

有什么建议吗?我可以使用 tkiz、metapost 或任何其他工具。

我从链接的问题中偷了这个:

\documentclass{standalone}

\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}

\begin{document}

\pgfplotsset{
colormap={whitered}{color(0cm)=(white); color(1cm)=(orange!75!red)}
}

\begin{tikzpicture}[
    rotate=30,
    declare function={mu1=1;},
    declare function={mu2=2;},
    declare function={sigma1=0.5;},
    declare function={sigma2=1;},
    declare function={normal(\m,\s)=1/(2*\s*sqrt(pi))*exp(-(x-\m)^2/(2*\s^2));},
    declare function={bivar(\ma,\sa,\mb,\sb)=
        1/(2*pi*\sa*\sb) * exp(-((x-\ma)^2/\sa^2 + (y-\mb)^2/\sb^2))/2;}]
\begin{axis}[
    colormap name=whitered,
    width=15cm,
    view={0}{90},
    enlargelimits=false,
    domain=0:2,
    y domain=0:4,
    samples=17,
    axis equal image,
    hide axis,
]
\addplot3 [surf, draw=none, shader=interp, patch type=bilinear] {bivar(mu1,sigma1,mu2,sigma2)};
\end{axis}
\end{tikzpicture}
\end{document}

答案1

这实际上并不能产生您想要的数字。我甚至不确定当您手头既没有真实数据也没有函数时是否应该绘制这种类型的图。相反,您可以根据需要绘制椭圆。

我之所以发布此内容,是因为在您的链接中,高斯分布的非平凡主轴是通过旋转图片获得的。另一方面,这里引入了一个旋转角度,允许您旋转主轴。因此,例如,您可以绘制两个相对旋转的高斯分布。在代码中,旋转角度为alpha1alpha2。峰值由参数给出mu,因此您可以使用完整的 2D 欧几里得群来移动高斯分布。

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17} 

\begin{document}
% 
% \pgfplotsset{
% colormap={whitered}{color(0cm)=(white); color(1cm)=(orange!75!red)}
% }

\begin{tikzpicture}[
    declare function={mu1=1;mu2=2;sigma1=0.5;sigma2=1.5;alpha1=-60;
        mu3=2.25;mu4=1;sigma3=0.3;sigma4=1;alpha2=0;},
    declare function={normal(\m,\s)=1/(2*\s*sqrt(pi))*exp(-(x-\m)^2/(2*\s^2));},
    declare function={bivar(\ma,\sa,\mb,\sb,\a)=
        1/(2*pi*\sa*\sb) * 
        exp(-(pow((x-\ma)*cos(\a)+(y-\mb)*sin(\a),2)/\sa^2 
            + pow(-(x-\ma)*sin(\a)+(y-\mb)*cos(\a),2)/\sb^2))/2;}]
\begin{axis}[%x=1cm,y=1cm,z=1cm,
    %colormap name=whitered,
    width=15cm,
    view={0}{90},
    enlargelimits=false,
    domain=0:4,
    y domain=0:4,
    samples=51,
    axis equal image,
    hide axis,
    colormap/hot
]
\addplot3[surf,% draw=none, 
    shader=interp,
    %smooth,contour gnuplot={number=14,labels=false}
    ]   
    {bivar(mu1,sigma1,mu2,sigma2,alpha1)+bivar(mu3,sigma3,mu4,sigma4,alpha2)
    +10*bivar(mu1,sigma1,mu2,sigma2,alpha1)*bivar(mu3,sigma3,mu4,sigma4,alpha2)};
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

这看起来不像是现实数据?因为这不是现实数据。

相关内容