删除网格线并缩短 pgfplots 显示中的剩余网格线

删除网格线并缩短 pgfplots 显示中的剩余网格线

我有一条抛物线y = x^{2} - 5x + 4在间隔内的图[-2, 7]和一条法线。我有默认间隔 5 个单位的网格线。由于抛物线和直线在 处相交(4,0),因此我extra x ticks={4}在代码中标记了它,并且必须extra x tick labels={$\scriptstyle4$}给它贴上标签。那里绘制了一条额外的垂直网格线。我该如何删除它?

x我喜欢-axis 和-axis的长度。网格线画得太长了。如果我减少、、或 的y值,网格线和轴都会变短。我该如何缩短网格线?xminxmaxyminymax

另外,我不喜欢顶点标记的显示。如果我标记顶点,我想将坐标表示为分数。有人有什么建议吗?

\documentclass[10pt]{amsart}
\usepackage{mathtools}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}

\usepackage{pgfplots}
\pgfplotsset{compat=1.11}


\begin{document}

\begin{tikzpicture}
\begin{axis}[width=4in,grid=both,grid style={line width=.1pt, draw=gray!25}, axis equal image, clip=false,
    axis lines=middle,
    xmin=-7.5,xmax=12.5,
    ymin=-7,ymax=22.5,
    restrict y to domain=-5:20,
    xticklabels={, , , , , ,},
    yticklabels={, , , , , , ,},
    extra x ticks={4},
    extra x tick style={xticklabel style={font=\tiny,fill=white, circle, inner sep=1.5pt}},
    extra x tick labels={$\scriptstyle4$},
    axis line style={latex-latex},
    axis line style={shorten >=-7.5pt, shorten <=-7.5pt},
    xlabel=$x$, ylabel=$y$,
    xlabel style={at={(ticklabel* cs:1)},anchor=north west},
    ylabel style={at={(ticklabel* cs:1)},anchor=south west}
]

\addplot[samples=501, domain=-2:7] {x^2 - 5*x + 4} node[anchor=west, pos=1, font=\footnotesize]{$y=x^{2}-5x+4$};
\addplot[samples=2, domain=-7.5:12.5, latex-latex] {(-1/3)*x + 4/3} node[anchor=east, pos=0, font=\footnotesize]{$y=-\dfrac{1}{3}x+\dfrac{4}{3}$};

\draw[fill] (4,0) circle [radius=1.5pt];
\draw[fill] (2.5,-2.25) circle [radius=1.5pt];
\node[anchor=north, inner sep=0, font=\tiny] at (2.5,-2.5){$\left(\dfrac{5}{2}, -\dfrac{9}{4}\right)$};

\end{axis}
\end{tikzpicture}

\end{document}

答案1

我谷歌了一下extra x ticks grid line,找到了这个问题这解决了您的主要问题。

因此,诀窍是改变的风格extra x tick

extra x tick style={grid=none},

在您的示例中它看起来像这样:

% [...]
    axis line style={latex-latex},
    axis line style={shorten >=-7.5pt, shorten <=-7.5pt},
    xlabel=$x$, ylabel=$y$,
    xlabel style={at={(ticklabel* cs:1)},anchor=north west},
    ylabel style={at={(ticklabel* cs:1)},anchor=south west},
    extra x tick style={grid=none}, % <--- I added this!
]
% [...]

这导致了这样的输出:

在此处输入图片描述

笔记 我添加了这些样式选项以便您可以在图片中看到它:

major grid style={line width = 0.5pt,red},
axis line style={line width = 1pt},

答案2

我根本不会添加extra x ticks。相反,我建议用普通节点标记与 x 轴点相交的斜线。通过删除它并采取一些其他措施,代码变得更简单:

\documentclass[10pt]{amsart}
    \usepackage{pgfplots}
\pgfplotsset{compat=1.11}
%\usepackage{tikz}% it is load by pgfplots
%\usetikzlibrary{calc,intersections}% not needed in this particular case
    \usepackage{mathtools}

\begin{document}
    \begin{tikzpicture}[
    tbox/.style = {font=\tiny},% <-- added
    fbox/.style = {font=\footnotesize}% <-- added 
                        ]
\begin{axis}[width=4in,
    grid,% <-- changed
    grid style={line width=.1pt, draw=gray!50}, axis equal image, 
    clip=false,
%
    axis lines=middle,
    xmin=-7.5,xmax=12.5,
    ymin=-7,  ymax=22.5,
    xticklabels={empty},% <-- changed
    yticklabels={empty},% <-- changed
%
%    extra x ticks={4}, % <-- removed
%    extra x tick style={xticklabel style={...}}, % <-- removed
%    extra x tick labels={$\scriptstyle4$},% <-- removed
%
    axis line style={latex-latex},
    axis line style={shorten >=-7.5pt, shorten <=-7.5pt},
    xlabel=$x$, ylabel=$y$,
    xlabel style={anchor=north west},% <-- changed
    ylabel style={anchor=south west} % <-- changed
]
\addplot[samples=501,domain=-2:7] {x^2 - 5*x + 4} node[fbox,right]{$y=x^{2}-5x+4$};
\addplot[samples=2,  domain=12.5:-7.5, latex-latex] {(-1/3)*x + 4/3} node[fbox,left]{$y=-\dfrac{1}{3}x+\dfrac{4}{3}$}; % <-- changed

\draw[fill] (4,0)       circle [radius=1.5pt] node[tbox,below] {4};
\draw[fill] (2.5,-2.25) circle [radius=1.5pt] node[tbox,below] {$\left(\dfrac{5}{2}, -\dfrac{9}{4}\right)$};
\end{axis}
    \end{tikzpicture}
\end{document}

编辑: 就我所见extra x ticks,我假设该坐标是预先知道的,并且仅用标签指定。所以我得出结论,这个点可以指定为图中的其他点:通过节点。因此,我建议不要使用extra x ticks所有必要的复杂功能来使其按预期出现,而是使用简单的节点。

总的来说,我并不关心图形的外观。颜色或线条粗细可以很容易地根据自己的喜好或其他愿望进行更改。

与所讨论的 MWE 相比,上述 MWE 中的所有其他更改均% <-- ....在代码中用注释标明,说明有何不同(更改、添加)。它们是:

  • 在序言中被删除tikz(因为它是由加载的pgfplots)和 TikZ 库
  • 定义了两种用于图形的节点样式:tbox带有字体大小的文本的节点tinyfbox带有字体大小的文本的节点\footnotesize。这样,后者的代码更短,更容易阅读。
  • grid=both仅通过执行相同操作进行更改grid(对于这个答案来说并不重要)
  • xticklabels={, , , , , ,}和类似地yticklabels被替换为更短的xticklabels={empty},这会产生相同的结果。

在此处输入图片描述

相关内容