pgfplot 上的分数刻度

pgfplot 上的分数刻度

我正在尝试使用 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

有两种可能的选择可以实现此目的:

  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}$}。或者
  2. 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}

在此处输入图片描述

相关内容