如何恢复刻度标签

如何恢复刻度标签

我正在尝试回答问题。我几乎找到了解决方案,但我错过了最后一件事。代码如下:

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgflibrary{fixedpointarithmetic}
\usepackage{fp}

\makeatletter
\newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis}
\makeatother

\pgfplotsset{after end axis/.append code={
  \pgfmathsetmacro{\maxexponent}{round(log10(\pgfkeysvalueof{/pgfplots/ymax}))}
  \pgfmathparse{-3*floor(\maxexponent/3)}
  \pgfmathsetmacro{\exponent}{\pgfmathresult}
  \pgfplotsset{scaled y ticks=base 10:\exponent}
  \pgfplotsdrawaxis}}

\newenvironment{myaxis}[1][]
{\begin{axis}[yticklabels={},scaled y ticks=false,#1]}
{\end{axis}}

\begin{document}

  \begin{tikzpicture}[fixed point arithmetic]
    \begin{myaxis}
      \addplot {1000000*x^2};
    \end{myaxis}    
  \end{tikzpicture}

\end{document}

我使用该after end axis选项来存储图的最大 y 值并获取缩放的正确指数,然后重新绘制轴。为了避免默认刻度和新刻度(不同的缩放比例)的叠加,我定义了一个没有 y 刻度标签的新环境。但我不知道如何恢复它们……到目前为止的结果如下:

在此处输入图片描述

我得到了正确的比例(此功能的默认值为 10^7)但我无法打印 y 刻度标签...

答案1

最后我找到了一个解决方案。我使用用于绘制刻度标签\axisdefaultticklabel的宏pgfplots将其重新定义为空,并将其恢复为初始值after end axis

\documentclass{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgflibrary{fixedpointarithmetic}
\usepackage{fp}

\makeatletter
\newcommand{\pgfplotsdrawaxis}{\pgfplots@draw@axis}
\makeatother

\pgfplotsset{after end axis/.append code={
  \pgfmathsetmacro{\maxexponent}{round(log10(\pgfkeysvalueof{/pgfplots/ymax}))}
  \pgfmathparse{-3*floor(\maxexponent/3)}
  \pgfmathsetmacro{\exponent}{\pgfmathresult}
  \def\axisdefaultticklabel{$\pgfmathprintnumber{\tick}$}
  \pgfplotsset{scaled y ticks=base 10:\exponent}
  \pgfplotsdrawaxis}}

\newenvironment{myaxis}[1][]
{\begin{axis}[scaled y ticks=false,#1]%
    \def\axisdefaultticklabel{}}
{\end{axis}}

\begin{document}

\begin{tikzpicture}[fixed point arithmetic]
\begin{myaxis}
\addplot {1000*x^2};
\end{myaxis}

\end{tikzpicture}

\end{document}

相关内容