如果我编译这个文件:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16,every axis/.append style={
axis x line=middle,
axis y line=middle,
ticks=none}}
\pagestyle{empty}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[xmin=-.2,xmax=2.75,ymin=-.2,ymax=2.25]
\plot[thick,samples=100,domain=.5:2.5] {1/x};
\coordinate (a1) at (.8,0);
\coordinate (a2) at (0,1.25);
\coordinate (b1) at (2,0);
\coordinate (b2) at (0,.5);
\node[below] at (a1) {\footnotesize$a$};
\node[below] at (b1) {\footnotesize$b$};
\node[left] at (a2) {\footnotesize$1/a$};
\node[left] at (b2) {\footnotesize$1/b$};
\draw[thin,dashed](a1)--(a1|-a2)--(a2);
\draw[thin,dashed](b1)--(b1|-b2)--(b2);
\end{axis}
\end{tikzpicture}
\end{center}
\end{document}
那么我得到的是这样的:
如您所见,垂直轴左侧的部分文本被裁剪了。我可以通过用 替换xmin=-.2
来轻松修复此问题xmin=-.25
,但如果我不想在保留 的同时裁剪文本,我该怎么办xmin=-.2
?
答案1
只需将节点移出轴环境即可。(使用clip=false
可能会产生不良的副作用,例如过度绘图。)
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16,every axis/.append style={
axis x line=middle,
axis y line=middle,
ticks=none}}
\pagestyle{empty}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[xmin=-.2,xmax=2.75,ymin=-.2,ymax=2.25]
\plot[thick,samples=100,domain=.5:2.5] {1/x};
\coordinate (a1) at (.8,0);
\coordinate (a2) at (0,1.25);
\coordinate (b1) at (2,0);
\coordinate (b2) at (0,.5);
\draw[thin,dashed](a1)--(a1|-a2)--(a2);
\draw[thin,dashed](b1)--(b1|-b2)--(b2);
\end{axis}
\node[below] at (a1) {\footnotesize$a$};
\node[below] at (b1) {\footnotesize$b$};
\node[left] at (a2) {\footnotesize$1/a$};
\node[left] at (b2) {\footnotesize$1/b$};
\end{tikzpicture}
\end{center}
\end{document}
还有各种其他选项,例如将这些节点添加为额外的刻度,这些节点也不会被剪裁。
答案2
我看到您设置了ticks=none
,然后手动添加了一些非常类似于轴刻度的东西。如果您使用 PGFPLOTS 自己的刻度放置系统,则刻度标签不会被剪裁。
在这个例子中,有很多键设置,但是一旦绘制了图,代码就会减少。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16,every axis/.append style={
axis x line=middle,
axis y line=middle,
xticklabel style={name=xtick \ticknum},
yticklabel style={name=ytick \ticknum},
}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=0,xmax=2.5,ymin=0,ymax=2,
enlargelimits,
xtick={0.8,2},
xticklabels={$a$,$b$},
ytick={0.5,1.25},
yticklabels={$1/a$,$1/b$},
tick style={draw=none},
ticklabel style={font=\footnotesize},
typeset ticklabels with strut,
]
\addplot[thick,samples=100,domain=.5:2.5] {1/x};
\coordinate (O) at (axis cs:0,0);
\coordinate (a1) at (xtick 0 |- O);
\coordinate (a2) at (ytick 1 -| O);
\coordinate (b1) at (xtick 1 |- O);
\coordinate (b2) at (ytick 0 -| O);
\draw[thin,dashed](a1)--(a1|-a2)--(a2);
\draw[thin,dashed](b1)--(b1|-b2)--(b2);
\end{axis}
\end{tikzpicture}
\end{document}
笔记:
我们可以看到 y 刻度标签没有被自动剪裁。
和
xticklabel style
键yticklabel style
为刻度标签节点命名。然后我们可以使用这些刻度标签沿轴定位a1
、a2
、b1
和节点。b2
我们无需通过在每个最小值和最大值上加或减一点来手动扩大限制,这个
enlargelimits
密钥可以替我们做到这一点。使和刻度标签
typeset ticklabels with strut
的基线对齐。我们可以使用或类似方法 将 x 刻度标签移近 x 轴。a
b
xticklabel shift={-1.5mm}
答案3
让我将我的评论转换为答案。 在你的情况下,clip=false
效果很好:
\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16,
axis lines=middle, % <---
ticks=none}
\begin{document}
\begin{tikzpicture}[
every label/.style={font=\footnotesize, text height=1.2ex, inner sep=2pt}
]
\begin{axis}[
xmin=-.2,xmax=2.75,
ymin=-.2,ymax=2.25,
clip=false] % <---
\plot[thick,samples=100,domain=.5:2.5] {1/x};
%
\coordinate[label=below:$a$] (a1) at (0.8,0); % <---
\coordinate[label=below:$b$] (b1) at (2.0,0); % <---
\coordinate[label=left:$1/a$] (a2) at (0,1.25); % <---
\coordinate[label=left:$1/b$] (b2) at (0,0.5); % <---
%
\draw[very thin, densely dashed]
(a1) |- (a2) (b1) |- (b2); % <---
\end{axis}
\end{tikzpicture}
\end{document}