如何将 TikZ 数据可视化中的绘图剪辑到轴边界?

如何将 TikZ 数据可视化中的绘图剪辑到轴边界?

在 TikZ 数据可视化中设置轴限制时,轴外的数据会被淹没并覆盖轴,同时还会推高图片边界框的大小。我该如何让它剪裁到轴边界?

\documentclass[tikz,border=2mm]{standalone}
 \usetikzlibrary{datavisualization}
\begin{document}
\begin{tikzpicture}

 \datavisualization [%
    scientific axes,
    y axis={min value=-1},
    visualize as line
  ]
  data { 
    x, y
    0, 0
    1, -0.5
    2, -2
    3, -0.5
    4, 0
};

\end{tikzpicture}
\end{document}

预览

答案1

数据可视化

我检查了文档(Tikz 手册六、数据可视化,版本 3.1.9a 中的第 851 页),但我找不到任何相关信息。因此,唯一的方法就是将 更改min value为坐标中的最小值。

这将产生这样的结果:

图1

它不完全是您上面所拥有的,但没有提及如何剪辑或将域限制到某些坐标。

Pgf 图

或者,您可以使用它来重现相同的图pgfplots,显然,它更善于控制显示的内容。例如,在您的例子中,您可以写入,domain=-1:4并且超出这些坐标的所有内容都将被剪裁。您的图表将如下所示:

图 2

代码(用于两张图片)

\documentclass[tikz,border=2mm]{standalone}
\usepackage{pgfplots}

\usetikzlibrary{datavisualization}

\begin{document}
\begin{tikzpicture}

 \datavisualization [%
    scientific axes,
    y axis={min value=-2},
    visualize as line,
  ]
  data { 
    x, y
    0, 0
    1, -0.5
    2, -2
    3, -0.5
    4, 0
};
\begin{scope}[xshift=8cm]
\begin{axis}[
    height=4.7cm,
    width=7cm,
    xtick align=outside,
    ytick align=outside,
    x tick label style={font=\footnotesize},
    y tick label style={font=\footnotesize},
    enlargelimits=false,
    ymin=-1
    ]
    \addplot[mark=none,line width=.6pt, domain=-1:4] coordinates{(0,0) (1,-0.5) (2,-2) (3,-0.5) (4,0)};
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}

答案2

以下是我们用数学表达式实现此目的的方法。您应该创建一个新格式(第 76.6 章“高级:定义新格式”Till's Tantau 2015“Tik Z 和 PGF 包”手册)。

在解析输入文件中的行时,模式会评估行中的每个第一个值,并将其与范围边界“\rmin”和“\rmax”进行比较。逻辑运算的结果存储在“\pgfmathresult”中,并由“\ifnum”用于决定是将其添加到数据点数组还是跳过整行。

代码:

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{datavisualization}
\pgfdeclaredataformat{inrange}
{}
{}
{#1 #2}
{
\def\rmin{-2.0}
\def\rmax{2.0}
\pgfmathparse{and(greater(#1,\rmin),notgreater(#1,\rmax))}
\ifnum\pgfmathresult=1
\pgfkeyssetvalue{/data point/x}{#1}
\pgfkeyssetvalue{/data point/y}{#2}
\pgfdatapoint
\else
\relax
\fi
}
{}
{}

\begin{document}
\begin{tikzpicture}[scale=1.0]
\datavisualization [scientific axes,
                    visualize as smooth line, 
                    x axis={min value=-2.2, max value=2.2},
                    y axis={min value=0, max value=5, ticks=few}]
data  [format=inrange,
read from 
file=snippet.dat ];
\end{tikzpicture}
\end{document}

文件“snippet.dat”的内容:

-3.0 2.3
-2.3 5.6
-1.6 1.3
-0.4 0.3
0.8 1.5
1.7 2.3
2.4 1.6
2.8 1.8
3.3 3.7

结果(仅使用 [-2.0;2.0] 内的点):

仅使用 [-2.0;2.0] 范围内的点

答案3

调用之前安装剪切路径\datavisualization

\documentclass[tikz,border=2mm]{standalone}
 \usetikzlibrary{datavisualization}
\begin{document}
\begin{tikzpicture}

\clip(-18bp,-8bp) rectangle (5cm+2bp,0.618*5cm);
\datavisualization [%
    scientific axes,
    y axis={min value=-1},
    visualize as line
  ]
  data {
    x, y
    0, 0
    1, -0.5
    2, -2
    3, -0.5
    4, 0
};

\end{tikzpicture}
\end{document}

在此处输入图片描述

上图的剪切路径设置使得刻度标签、可能的轴标签和数据被剪切,但轴线或轴刻度没有被剪切。为了完成示例,可以将剪切路径调整到轴框,例如,再次绘制轴,

\begin{tikzpicture}

\begin{pgfscope}
\clip(0,0) rectangle (5cm,0.618*5cm);
\datavisualization [%
    scientific axes,
    y axis={min value=-1},
    visualize as line
  ]
  data { 
    x, y
    0, 0
    1, -0.5
    2, -2
    3, -0.5
    4, 0
};
\end{pgfscope}
\datavisualization[scientific axes,
    y axis={include value=-1, include value=0},
    x axis={include value=0, include value=4}]
data {};

\end{tikzpicture}
\end{document}

相关内容