![缩放和修剪 pgfplots 图片中的空白区域](https://linux22.com/image/288135/%E7%BC%A9%E6%94%BE%E5%92%8C%E4%BF%AE%E5%89%AA%20pgfplots%20%E5%9B%BE%E7%89%87%E4%B8%AD%E7%9A%84%E7%A9%BA%E7%99%BD%E5%8C%BA%E5%9F%9F.png)
在回答如何使用两条导入的曲线创建组合图形并使用 Tikz 在其周围绘制?,我能够让我的图表填充两条水平线之间的空间,如图所示这里。然而,当我尝试导入dat
文件时,遇到了困难。
我的第一个问题是扩展。我以为我可以使用键height
来固定图像的高度。但它的表现并不像我想象的那样:
\documentclass{article}
\usepackage{tikz}
\usepackage{pgfplots}
\def\myimage#1{%%
\begin{tikzpicture}%%[x=#1,y=#1]
\begin{axis}[
height=#1,
hide axis,
no markers,
]
\addplot + table[x index=0, y index=1]{vp1.dat};
\end{axis}
\end{tikzpicture}}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(6,0)
(0,4) -- ++(6,0);
\node[inner sep=0pt,draw,red] at (3,2) {\myimage{4cm}};
\end{tikzpicture}
\end{document}
我希望红色框的顶部和底部与黑色水平线齐平。
我的第二个问题正在删除所有空白。当我隐藏轴时,我希望图表的边界框尽可能紧密地贴合。换句话说,红色边框应该紧贴图表的蓝色。
这是我的vp1.dat
文件:
1 3
2 4
3 -5
4 6
这是我的vp2.dat
文件:
1 3
2 4
3 1
4 3
更新
我的问题有部分解决方案,但没有综合解决方案。
第一个问题的解决方案
关于第一个问题,我可以pgfplot
通过组合使用来填充所需的效果
scale only axis
height=#2
梅威瑟:
\documentclass{article}
\usepackage[margin=0.5in]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\def\myimage#1#2{%%
\begin{tikzpicture}
\begin{axis}[
scale only axis,
height=#2,
hide axis,
no markers,
]
\addplot + table[x index=0, y index=1]{#1};
\end{axis}
\end{tikzpicture}}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(6,0)
(0,4) -- ++(6,0);
\node[anchor=south] at (3,4) {\texttt{height=4cm} passed to \texttt{pgfplots}};
\node[inner sep=0pt,draw,red] at (3,2) {\myimage{vp1.dat}{4cm}};
\draw[<->] (6.25,0) -- ++(0,4) node [midway,right]{4cm};
\end{tikzpicture}
\end{document}
结果是:
第二个问题的解决方法
关于第二个问题,我可以pgfplot
通过同时使用来修剪我不想要的多余空白
clip bounding box=upper bound
hide axis
梅威瑟:
\documentclass{article}
\usepackage[margin=0.5in]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\def\myimage#1#2{%%
\begin{tikzpicture}
\begin{axis}[
clip bounding box=upper bound,
hide axis,
no markers,
]
\addplot + table[x index=0, y index=1]{#1};
\end{axis}
\end{tikzpicture}}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\node[anchor=south] at (3,4.35) {graph fits snuggly in its bounding box};
\node[inner sep=0pt,draw,red] at (3,2) {\myimage{vp1.dat}{4cm}};
\end{tikzpicture}
\end{document}
结果是:
无法采用综合方法
但是当我尝试结合这两种方法时,高度没有得到正确遵循,而且我无法弄清楚它是如何计算的。
\documentclass{article}
\usepackage[margin=0.5in]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\def\myimage#1#2{%%
\begin{tikzpicture}
\begin{axis}[
scale only axis,
clip bounding box=upper bound,
height=#2,
hide axis,
no markers,
]
\addplot + table[x index=0, y index=1]{#1};
\end{axis}
\end{tikzpicture}}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(6,0)
(0,4) -- ++(6,0);
\node[anchor=south] at (3,4) {combining \texttt{clipping} and \texttt{height}};
\node[inner sep=0pt,draw,red] at (3,2) {\myimage{vp1.dat}{4cm}};
\draw[<->] (6.25,0) -- ++(0,4) node [midway,right]{4cm};
\end{tikzpicture}
\end{document}
结果是:
答案1
您想与和enlargelimits=false
结合。默认在图周围添加一些空白,然后将其删除。scale only axis
height
pgfplots
enlargelimits=false
\documentclass{article}
\usepackage[margin=0.5in]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\def\myimage#1#2{%%
\begin{tikzpicture}
\begin{axis}[
scale only axis,
height=#2,
hide axis,
no markers,
enlargelimits=false
]
\addplot + table[x index=0, y index=1]{#1};
\end{axis}
\end{tikzpicture}}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(6,0)
(0,4) -- ++(6,0);
\node[anchor=south] at (3,4) {\texttt{enlargelimits}, \texttt{scale only axis} and \texttt{height}};
\node[inner sep=0pt,draw,red] at (3,2) {\myimage{vp1.dat}{4cm}};
\draw[<->] (6.25,0) -- ++(0,4) node [midway,right]{4cm};
\end{tikzpicture}
\end{document}
答案2
我希望有人能够给出一个完全符合tikz
或pgfplots
指令的答案。
这是一个解决方案,可以让我两个都剪掉多余的空白和将盒子设置为所需的高度。
我的方法是使用pgfplots
通过以下方式剪切额外空白的功能
hide axis
clip bounding box=upper bound
然后我将图形保存到一个框中(或者,我可以将其放在自己的standalone
文件中)。然后我根据保存的框的大小进行缩放。
\documentclass{article}
\usepackage[margin=0.5in]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\def\myimageSnug#1{%%
\begin{tikzpicture}
\begin{axis}[
clip bounding box=upper bound,
hide axis,
hide axis,
no markers,
]
\addplot + table[x index=0, y index=1]{#1};
\end{axis}
\end{tikzpicture}}
\pagestyle{empty}
\begin{document}
\newsavebox{\myimagebox}
\savebox{\myimagebox}{\myimageSnug{vp1.dat}}
\begin{tikzpicture}
\draw (0,0) -- ++(6,0)
(0,4) -- ++(6,0);
\node[anchor=south] at (3,4.35) {\footnotesize graph fits snuggly in its bounding box \textbf{and} it's the correct height};
\node[inner sep=0pt,draw,red,scale=4cm/\ht\myimagebox] at (3,2) {\usebox{\myimagebox}};
\end{tikzpicture}%%
\end{document}
导致
或者,我可以使用standalone
名为的文件graph_01
:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
clip bounding box=upper bound,
hide axis,
hide axis,
no markers,
]
\addplot + table[x index=0, y index=1]{vp1.dat};
\end{axis}
\end{tikzpicture}
\end{document}
然后导入它:
\documentclass{article}
\usepackage{graphicx}
\usepackage[margin=0.5in]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(6,0)
(0,4) -- ++(6,0);
\node[anchor=south] at (3,4.35) {\footnotesize graph fits snuggly in its bounding box \textbf{and} it's the correct height};
\node[inner sep=0pt,draw,red] at (3,2) {\includegraphics[height=4cm]{graph_01}};
\end{tikzpicture}%%
\end{document}