我正在尝试在 LaTeX 文档中绘制隐式函数,并且我使用 TiKZ 绘制所有图表。对于隐式函数,我调用 gnuplot,我发现最好的解决方案(似乎可以在我的不同系统之间移植)是使用包gnuplottex
,并将 gnuplot 终端设置为epslatex
。我尝试过\draw[raw gnuplot]
在 TiKZ 中使用,也尝试过 pgfplots;但这些都没有给我正确的图。(嗯,实际上raw gnuplot
在我的一个系统上给出了一个很好的结果,而在另一个系统上,到处都是疯狂的线条,结果很乱。)
然而!尽管 gnuplot 输出本身是正确的,但我实际上希望它出现在更大的 TIKZ 图中,因此当我将 gnuplot 图片视为 TiKZ 节点时,我需要以某种方式确保 gnuplot 的 (0,0) 与 TiKZ 的 (0,0) 一致:
\begin{tikzpicture}
\draw[color=lightgray] (-4,0) -- (4,0);
\draw[color=lightgray] (0,-4) -- (0,4);
\draw[dashed,color=lightgray] (-1,-1) rectangle (1,1);
\node[scale=1.2] at (0,0) {
\begin{gnuplot}[terminal=epslatex]
set contour
set cntrparam levels incremental -0.02,0.01,0.02
set view map
set view equal
unset surface
unset key
unset tics
unset border
set isosamples 1000,1000
set xrange [-3.5:3.5]
set yrange [-3.5:3.5]
set view 0,0
set cont base
splot x**3 + y**3 - 6*x*y
\end{gnuplot}
};
\end{tikzpicture}
至少我喜欢用 TiKZ 绘制轴和一些其他东西,然后我就可以将 gnuplot 图正确定位在图表上。
但是,目前 gnuplot (0,0) 略微偏右,略高于 TiKZ 的 (0,0)。我知道我可以使用 TiKZ 命令grid
并重新定位轴,使它们处于正确的位置,但这似乎有点麻烦。
是否有一种简单、优雅、便携的方法来排列 TiKZ 和 gnuplot 图?
注意:有关完整示例,请参阅epslatex 测试.tex和epslatex 测试.pdf。
\documentclass{article}
\usepackage{tikz}
\usepackage[shell]{gnuplottex}
\begin{document}
The difficulty is shown in the figure.
\begin{figure}[h]%
\centering%
\begin{tikzpicture}
\begin{scope}
\draw[color=lightgray] (-4,0) -- (4,0);
\draw[color=lightgray] (0,-4) -- (0,4);
\draw[dashed,color=lightgray] (-1,-1) rectangle (1,1);
\end{scope}
\node[scale=1.2] at (0,0) {
\begin{gnuplot}[terminal=epslatex]
set contour
set cntrparam levels incremental -0.02,0.01,0.02
set view map
set view equal
unset surface
unset key
unset tics
unset border
set isosamples 1000,1000
set xrange [-3.5:3.5]
set yrange [-3.5:3.5]
set view 0,0
set cont base
splot x**3 + y**3 - 6*x*y
\end{gnuplot}
};
\end{tikzpicture}
\caption{A test of gnuplottex with epslatex}
\label{fig:gnuplot}
\end{figure}
\end{document}
答案1
我不知道这是否是最好的方法,但它有效:)
您可以使用tikz
终端,并为其指定所需的大小。为此,您必须将绘图大小设置为等于画布大小(set lmargin ...
等等)。(我还没有尝试过这个plotsize
选项)。
要将您的图片与 gnuplot tikzpicture 环境重叠,您可以移动scope
。
\documentclass{article}
\usepackage{tikz}
\usepackage{gnuplot-lua-tikz}
\usepackage[shell]{gnuplottex}
\thispagestyle{empty}
\begin{document}
The difficulty is shown in the figure.
\begin{figure}[h]%
\centering%
\begin{tikzpicture}
\begin{scope}[shift={(4,4)}]
\draw[color=lightgray] (-4,0) -- (4,0);
\draw[color=lightgray] (0,-4) -- (0,4);
\draw[dashed,color=lightgray] (-1,-1) rectangle (1,1);
\end{scope}
\begin{gnuplot}[terminal=tikz,terminaloptions={size 8,8}]
set contour
set cntrparam levels incremental -0.02,0.01,0.02
set view map
set view equal
unset surface
unset key
unset tics
unset border
set lmargin at screen 0
set rmargin at screen 1
set bmargin at screen 0
set tmargin at screen 1
set isosamples 1000,1000
set xrange [-3.5:3.5]
set yrange [-3.5:3.5]
set view 0,0
set cont base
splot x**3 + y**3 - 6*x*y
\end{gnuplot}
\end{tikzpicture}
\caption{A test of gnuplottex with epslatex}
\label{fig:gnuplot}
\end{figure}
\end{document}
答案2
这是我昨晚经过一番努力后得到的解决方案:我可以让 pgfplots 工作:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
This is a test of pgfplots.
\begin{tikzpicture}
\draw[<->,color=lightgray] (-4,0) -- (4,0);
\draw[<->,color=lightgray] (0,-4) -- (0,4);
\draw[dashed] (-1,-1) rectangle (1,1);
\begin{axis}[x=1cm,y=1cm,z=1cm,
axis lines=none,
view={0}{90},
anchor=center]
\addplot3[line width=2pt,contour gnuplot={levels={0},labels=false},
samples=41,
domain=-3.5:3.5,
y domain = -3.5:3.5]
{x^3+y^3-6*x*y};
\end{axis}
\end{tikzpicture}
\end{document}
在这种情况下,将 pgfplot 轴锚定在“中心”似乎可以解决问题。
答案3
使用origin
锚点来定位图:
\documentclass[margin=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
\draw[<->,color=lightgray] (-4,0) -- (4,0);
\draw[<->,color=lightgray] (0,-4) -- (0,4);
\draw[dashed] (-1,-1) rectangle (1,1);
\begin{axis}[
x=1cm,y=1cm,z=1cm,
axis lines=none,
view={0}{90},
anchor=origin% anchoring at origin
]
\addplot3[
line width=2pt,
contour gnuplot={levels={0},
labels=false},
samples=41,
domain=-3.5:3.5,
y domain = -3.5:3.5
]{x^3+y^3-6*x*y};
\end{axis}
\end{tikzpicture}
\end{document}
但也许最好在环境内绘制轴线和虚线矩形axis
:
\documentclass[margin=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
x=1cm,y=1cm,z=1cm,
axis z line=none,
axis x line=middle,
axis y line=middle,
axis line style={<->,lightgray},
xmin=-4,xmax=4,
ymin=-4,ymax=4,
view={0}{90},
]
\draw[dashed] (axis cs:-1,-1) rectangle (axis cs:1,1);
\addplot3[
line width=2pt,
contour gnuplot={levels={0},
labels=false},
samples=41,
domain=-3.5:3.5,
y domain = -3.5:3.5
]{x^3+y^3-6*x*y};
\end{axis}
\end{tikzpicture}
\end{document}
结果和上面一样。