我正在尝试使用 pgfplots 绘制 y 轴上有小数刻度的图。遗憾的是,pgfplots 不能很好地处理诸如 之类的东西yticks = {1/36, 1/18, 1/12, 1/9, 5/36, 1/6}
,并且会给出各种关于如何表示它们的错误。
最后,我受够了,缩放了我的图,让它通过整数点。不过,我仍然希望将小数刻度设为最低形式,因为目前我有 这是我的代码:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\pgfplotsset{
standard/.style={
axis x line=middle,
axis y line=middle,
enlarge x limits=0.15,
enlarge y limits=0.15,
every axis x label/.style={at={(1,0.1)},anchor=north west},
every axis y label/.style={at={(0.1,1.1)},anchor=north},
every axis plot post/.style={mark options={fill=white}}
}
}
\begin{tikzpicture}
\begin{axis}[
standard,
domain = 2:12,
samples = 11,
xlabel={$x$},
ylabel={$\Pr(X=x)$},
ymin=0,
yticklabel={$\frac{\pgfmathprintnumber{\tick}}{36}$},
ytick = {1, 2, 3, 4, 5, 6},
ymax=6]
\addplot+[ycomb,black,thick] {(6-abs(x-7))};
\end{axis}
\end{tikzpicture}
\end{document}
有没有更好的方法来解决整个问题?我很感激任何帮助。
答案1
有两种可能的选择可以实现此目的:
- 只需写
yticklabels={$1/36$, $1/18$, $1/12$, $1/9$, $5/36$, $1/6$}
为简化分数(或yticklabels={$1/36$, $2/36$, $3/36$, $4/36$, $5/36$, $6/36$}
,如果你愿意的话),或者使用 来显示普通分数yticklabels={$\frac{1}{36}$, $\frac{1}{18}$, $\frac{1}{12}$, $\frac{1}{9}$, $\frac{5}{36}$, $\frac{1}{6}$}
。或者 - 写
yticklabel={$\pgfmathprintnumber{\tick}/{36}$}
而不是yticklabel={$\frac{\pgfmathprintnumber{\tick}}{36}$}
。
注意,它们之间的区别在于,第一种是,你yticklabels=...
可以随意逐个编写和提及标签(简化或非简化),而第二种是,你可以yticklabel=...
使用自动生成的代码编写(但会显示非简化分数)。
简化分数
常见分数显示
非简化分数
另外,要放置在ylabel
垂直线上方并居中,您可以放置
every axis y label/.style={at={(current axis.above origin)},anchor=south},
只是为了让你知道,重要的是要包括这行
\pgfplotsset{compat=1.15}
在使用 PGFPlots 时,请参阅序言这个答案了解更多信息。
答案2
这是另一种方法,利用gcd
。
\documentclass{article}
\usepackage{pgfplots}
\newcommand{\Fraction}[2]{%
\pgfmathtruncatemacro{\tmpNumerator}{#1/gcd(#1,#2)}
\pgfmathtruncatemacro{\tmpDenominator}{#2/gcd(#1,#2)}
\ensuremath{\frac{\tmpNumerator}{\tmpDenominator}}
}
\begin{document}
\pgfplotsset{
standard/.style={
axis x line=middle,
axis y line=middle,
enlarge x limits=0.15,
enlarge y limits=0.15,
every axis x label/.style={at={(1,0.1)},anchor=north west},
every axis y label/.style={at={(0.1,1.1)},anchor=north},
every axis plot post/.style={mark options={fill=white}}
}
}
\begin{tikzpicture}
\begin{axis}[
standard,
domain = 2:12,
samples = 11,
xlabel={$x$},
ylabel={$\Pr(X=x)$},
ymin=0,
yticklabel={$\Fraction{\tick}{36}$},
ytick = {1, 2, 3, 4, 5, 6},
ymax=6]
\addplot+[ycomb,black,thick] {(6-abs(x-7))};
\end{axis}
\end{tikzpicture}
\end{document}