如何更改 pgfplot 沿给定轴移动标签的方式

如何更改 pgfplot 沿给定轴移动标签的方式

我有以下 MWE

\documentclass{article}
\usepackage{pgfplots}
\pagestyle{empty}
\usepackage{mathtools}
\begin{document}
\begin{tikzpicture}
\begin{axis}
  [
    minor x tick num=1,
    axis y line=center,
    axis x line=middle,
    xlabel=$x$,
    ylabel=$y\mathmbox{{}={}}\frac{1}{3}x-2$
  ]
\addplot
  [
    smooth,
    blue,mark=none,
    domain=-5:10,
    samples=40
  ]
{1/3*x-2};
\end{axis}
\end{tikzpicture}

\end{document}

我不知道如何让pgfplots标签沿 x 轴移动 1 个单位(而不是如图所示的 2 个单位),而无需执行诸如更改大小、紧凑度或使用的字体等奇怪的操作。

在此处输入图片描述

更新

虽然我对此并不完全满意。这里有一些解决方法,可以让我达到我想要的控制级别:

\def\xmin{-6}
\def\xmax{10}
\def\xinc{3}
\def\xlabels{\xmin}
\multido{\nx=\xmin+\xinc}{\number\numexpr(\xmax-\xmin)/\xinc+1\relax}{
  \ifnum\nx=\xmin\else
    \xdef\xlabels{\xlabels,\nx}
  \fi
}

\def\ymin{-6}
\def\ymax{4}
\def\yinc{2}
\def\ylabels{\ymin}
\multido{\ny=\ymin+\yinc}{\number\numexpr(\ymax-\ymin)/\yinc+1\relax}{
  \ifnum\ny=\ymin\else
    \xdef\ylabels{\ylabels,\ny}
  \fi
}

它的缺点是它只适用于整数值。

因此,将其付诸实践如下:

\documentclass{article}
\usepackage{pgfplots}
\pagestyle{empty}
\usepackage{mathtools}
\usepackage{multido}
\pgfplotsset{compat=1.7}
\begin{document}

\def\xmin{-6}
\def\xmax{10}
\def\xinc{3}
\def\xlabels{\xmin}
\multido{\nx=\xmin+\xinc}{\number\numexpr(\xmax-\xmin)/\xinc+1\relax}{
  \ifnum\nx=\xmin\else
    \xdef\xlabels{\xlabels,\nx}
  \fi
}

\def\ymin{-6}
\def\ymax{4}
\def\yinc{2}
\def\ylabels{\ymin}
\multido{\ny=\ymin+\yinc}{\number\numexpr(\ymax-\ymin)/\yinc+1\relax}{
  \ifnum\ny=\ymin\else
    \xdef\ylabels{\ylabels,\ny}
  \fi
}


\begin{tikzpicture}[]
\begin{axis}
  [
    unit vector ratio=1 1,
    minor x tick num=1,
    axis y line=center,
    axis x line=middle,
    xtick={\xlabels},
    ytick={\ylabels},
    xlabel=$x$,
    ylabel=$y\mathmbox{{}={}}\frac{1}{3}x-2$
  ]
\addplot
  [
    smooth,
    blue,mark=none,
    domain=\xmin:\xmax,
    samples=40
  ]
{1/3*x-2};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

但考虑到所有权力pgfplots都必须操纵图表的许多其他方面,似乎应该有一个比我想出的更简单的方法。

答案1

最简单但不是自动的方法是使用

xtick = {-5, ..., 10}

将使用\foreach的规则来完成...

如果你给予xminxmax价值你也可以使用它们

xmin=-5, xmax=10,
xtick={\pgfkeysvalueof{/pgfplots/xmin},...,\pgfkeysvalueof{/pgfplots/xmax}}

该软件包pgfplots还提供了选项max space between tickstry min tickspgfplots、4.14.4“刻度微调”:

/pgfplots/max space between ticks={<number>}(最初35
Con 以整点为单位配置相邻刻度之间的最大间距。后缀“ pt”必须省略,并且不支持小数。

/pgfplots/try min ticks={<number>}(最初4
配置刻度数的宽松下限。这应被视为建议,而不是严格限制。如果“ max space between ticks”产生的刻度数太少,此数字将增加刻度数。总刻度数仍可能有所不同,因为轴范围内的分数并非都是有效的刻度位置。

设置max space between ticks17.5增加X滴答 1 和0.5 滴答。同样适用try min ticks = 12刻度将已经加倍,其值为8

(我也摆脱了它,\mathmbox并用一个标准的替换它==只需要保护它免受pgfkeys'解析器的影响,参见TikZ 标签内的等号 (=)

代码

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\newcommand*{\myPlot}[1][]{%
\begin{tikzpicture}\begin{axis}[
    minor x tick num=1, axis y line=center, axis x line=middle,
    xlabel=$x$, ylabel={$y = \frac{1}{3}x-2$}, #1]
\addplot[smooth,blue,mark=none,domain=-5:10,samples=2]{1/3*x-2};
\end{axis}\end{tikzpicture}}
\begin{document}
\myPlot
\myPlot[xtick={-5,...,10}]
\myPlot[xmin=-5, xmax=10,
        xtick={\pgfkeysvalueof{/pgfplots/xmin},...,\pgfkeysvalueof{/pgfplots/xmax}}]
\myPlot[max space between ticks=17.5]
\myPlot[try min ticks=8]
\end{document}

相关内容