我有以下 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
的规则来完成...
。
如果你给予xmin
和xmax
价值你也可以使用它们
xmin=-5, xmax=10,
xtick={\pgfkeysvalueof{/pgfplots/xmin},...,\pgfkeysvalueof{/pgfplots/xmax}}
该软件包pgfplots
还提供了选项max space between ticks
和try min ticks
pgfplots
、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 ticks
为17.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}