绘图前四舍五入

绘图前四舍五入

在 latex 中,是否可以在绘图之前直接对表格中的数字进行四舍五入?我尝试使用round-precisionfromsiunitx包,但这似乎不起作用。MWE

    \documentclass{standalone}
    \usepackage{pgfplots}
    \usepackage{pgfplotstable}
    \pgfplotsset{compat=newest}
    \usepackage{siunitx}
    \begin{document}
    \begin{tikzpicture}
    \begin{axis}[
      xlabel= x,
      ylabel=y]
    \addplot[only marks, color=black,mark=square*] table [y=y[round-precision=0], x=x]{test.txt};
    \end{axis}
    \end{tikzpicture}
    \end{document}

数据表

x   y
1   1.2
2   1.56
3   1.559
4   1.07

答案1

这是一个常见问题pgfplots(或tikz一般问题),即您无法在打印数字之前对其进行舍入。但在这里,我们需要完全可扩展地对数字进行舍入,这可以使用 来完成l3fp

\round[<precision>]{<expression>}我声明了四舍五入expressionprecision小数位的宏。precision参数是可选的,默认为0,即四舍五入到最接近的整数。

\begin{filecontents*}{test.txt}
x   y
1   1.2
2   1.56
3   1.559
4   1.07
\end{filecontents*}
\documentclass{standalone}
\usepackage{pgfplots,xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand \round { O{0} m }
 { \fp_eval:n { round(#2,#1) } }
\ExplSyntaxOff
\begin{document}
\begin{tikzpicture}
  \begin{axis}[xlabel=$x$,ylabel=$y$,only marks]
    \addplot table [x=x,y=y]{test.txt};
    \addplot table [x=x,y expr={\round[1]{\thisrow{y}}}]{test.txt};
    \legend{bare,rounded}
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容