Gnuplot 和 TiKZ:中心图?

Gnuplot 和 TiKZ:中心图?

我正在尝试在 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 测试.texepslatex 测试.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}

结果和上面一样。

相关内容