在 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
为坐标中的最小值。
这将产生这样的结果:
它不完全是您上面所拥有的,但没有提及如何剪辑或将域限制到某些坐标。
Pgf 图
或者,您可以使用它来重现相同的图pgfplots
,显然,它更善于控制显示的内容。例如,在您的例子中,您可以写入,domain=-1:4
并且超出这些坐标的所有内容都将被剪裁。您的图表将如下所示:
代码(用于两张图片)
\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] 内的点):
答案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}