我有一个 Mathematica 代码,我想将其转换为 pgfplot 以获取轮廓,以便我可以将“TikZ”版本与使用 TikZ 制作的其他绘图一起使用。我实际上对 PGFPLOTS 中的多元绘图不太熟悉。代码是:
mycolor[z_] := RGBColor[1, 1 - z, 1 - z];
w0 = 0.1;
w[z_] := w0*Sqrt[1 + (z/0.25)^2];
i[r_, z_] := Sqrt[Exp[-(2*r^2)/(w[z]^2)]];
ContourPlot[i[r, z], {z, -1, 0}, {r, -1, 1}, PlotRange -> All,
PlotPoints -> 50, PlotTheme -> "Scientific",
ColorFunction -> mycolor, ColorFunctionScaling -> False,
Frame -> None, Contours -> 6]
输出为:
更新 1
我几乎得到了我想要的,但由于某些原因,那些黑线并没有出现。
\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
view={0}{90},
colormap={custom}{color(0)=(white) color(1)=(red)},
domain=-1:0,
y domain=-1:1,
axis line style={draw=none},
ticks=none
]
\addplot3 [
contour filled={labels=false,number=6,draw color=black},samples=50
] {sqrt(exp((-2*y^2)/(0.1*sqrt(1 + (x/0.25)^2))^2))};
\end{axis}
\end{tikzpicture}
\end{document}
输出:
更新2
draw color
如果我使用的功能contour lua
,我确实会得到我想要的线条,但它们与其中的边缘不适合contour filled
。
\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
view={0}{90},
colormap={custom}{color(0)=(white) color(1)=(red)},
domain=-1:0,
y domain=-1:1,
axis line style={draw=none},
ticks=none,
]
\addplot3 [
contour filled={labels=false,number=6},samples=50
] {sqrt(exp((-2*y^2)/(0.1*sqrt(1 + (x/0.25)^2))^2))};
\addplot3 [
contour lua={labels=false,number=6,draw color=black},samples=50
] {sqrt(exp((-2*y^2)/(0.1*sqrt(1 + (x/0.25)^2))^2))};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
我不知道不同层次发生了什么,但这看起来像你想要的:
\RequirePackage{luatex85}
\documentclass[border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
view={0}{90},
colormap={custom}{color(0)=(white) color(1)=(red)},
domain=-1:0, y domain=-1:1,
axis x line=none, axis y line=none,
]
\addplot3 [
contour filled={number=7},
samples=50,
] {sqrt(exp((-2*y^2)/(0.1*sqrt(1 + (x/0.25)^2))^2))};
\addplot3 [
contour lua={labels=false, levels={1/7,2/7,3/7,4/7,5/7,6/7}, draw color=black},
samples=100,
] {sqrt(exp((-2*y^2)/(0.1*sqrt(1 + (x/0.25)^2))^2))};
\end{axis}
\end{tikzpicture}
\end{document}
编辑:来自手册:
/pgfplots/contour/number={⟨integer⟩}(初始值为 5)配置轮廓线的数量,该数量应由任何轮廓算法生成。该值适用于轮廓 lua 和轮廓填充。
contour lua
对于和,显然处理方式不同contour filled
。对于contour filled
,域被均匀分割;对于contour lua
,轮廓被放置,因此它们以某种方式均匀分布。-因此需要明确给出与 匹配的级别contour filled
。