我想在 2D 平面上绘制高斯模式的强度分布。这由 I = exp(-2*(x^2+y^2)/w00^2) 给出,其中 x 和 y 是与中心轴的距离,w00 是常数。我希望高斯中心(强度最高)以某种特定颜色绘制(理想情况下为浅橙色或红色),并且随着与中心距离的增加,该颜色应逐渐变为白色,这与高斯强度一致。下面是一个 MWE,它绘制了一个圆圈,并朝着圆圈的边缘从红色逐渐变为白色。然而,标准褪色似乎是线性的。
在我的例子中,褪色应该按照高斯函数进行,因此峰值周围的颜色变化较慢,然后急剧下降,然后在很远的距离处缓慢趋于白色。它不应该只是线性的。如何使用 pgfplots 包实现这一点?
\documentclass{standalone}
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
\fill[inner color=red, outer color=white] (0,0) circle (1);
\end{tikzpicture}
\end{document}
答案1
你可以作弊。当然,如果你添加轴等,这种方法就行不通了,因为这样会发现图只会变得更白,而不是消失。
\documentclass[tikz,border=3.14pt]{standalone}
\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepgfplotslibrary{colormaps}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines = none,colormap={fake}{
rgb255(0cm)=(255,255,255); rgb255(1cm)=(255,0,0)}]
\addplot3[domain=-3:3,point meta=z,mesh,
z buffer=sort] {exp(-2*(x^2+y^2)/2^2)};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[axis lines = none,colormap={fake}{
rgb255(0cm)=(255,255,255); rgb255(1cm)=(255,0,0)}]
\addplot3[domain=-3:3,point meta=z,surf,shader=interp,
z buffer=sort] {exp(-2*(x^2+y^2)/2^2)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
这是一次尝试元帖子这可能会启发某人向您展示如何在 pgfplots 中做某事。
\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
%\mplibtextextlabel{enable}
%\mplibnumbersystem{double}
\begin{mplibcode}
beginfig(1);
vardef exp(expr x) = mexp(256x) enddef; % hide MP's version of exp
vardef normal_pdf(expr x) =
exp(-1/2x*x)/2.50662827463 % \sqrt(2\pi) \simeq 2.50663
enddef;
numeric r, s, u, v;
u = 16mm; v = 16mm; r=4; s=1/256;
for t=-r step s until r:
y := normal_pdf(t);
drawdot (t*u, y*5v) withpen pencircle scaled 1/2
withcolor (2y)[white, blue];
endfor
% axes
draw (left--right) scaled (r*u);
draw (down--up) scaled 2;
endfig;
\end{mplibcode}
\end{document}
这已被包裹起来,luamplib
因此您需要使用它lualatex
来通过示例进行编译,或使其适应普通的 Metapost。
我的想法是使用坐标值y
来改变颜色,并绘制足够多的点,使线条看起来连续。您也可以使用该y
值来更改点的大小。