使用 tikz 绘制对数时间轴

使用 tikz 绘制对数时间轴

我正在尝试使用 TikZ 绘制对数缩放的时间轴。我尝试从以下片段开始chronlogy.sty

\begin{tikzpicture}[baseline={(current bounding box.north)}]%
   \draw [|->] (0,0) -- (\thedeltayears*\unit+\unit, 0);%
   \foreach \x in {1,...,\thedeltayears}%
    \draw[xshift=\x*\unit] (0,-.1\unit) -- (0,.1\unit);%
  \addtocounter{deltayears}{1}%
  \foreach \x in {\thestepstart,\thestep,...,\thestepstop}{%
    \pgfmathsetlength\xstop{(\x-\theyearstart)*\unit}%
    \draw[xshift=\xstop] (0,-.3\unit) -- (0,.3\unit);%
    \node at (\xstop,0) [below=.2\unit] {\x};}}{%
\end{tikzpicture}%

水平轴应看起来像对数图的 x 轴,主刻度标记为 ...、、、、、10^-2... ,次要刻度没有标签,位于与 log10 对应的位置10^-1,、、...等。由于下限和上限应该是可自定义的,我需要在 TikZ 中实现适当的缩放函数。但是,我已经无法将简单的计算更改10^0为类似的东西。我怎样才能在这个地方实现非基本计算?请注意,我有意识地避免使用内置的,因为最终我想添加标签和具有不同单位的第二个轴等。我也尝试使用和并同样成功。10^12*10^-23*10^-2xshift=\x*\unitxshift=log10(pow(10,\x))*\unit\begin{axis}\pgfmathparse\pgfmathresult

答案1

人们可以贴上自己想要的标签。

在此处输入图片描述

\documentclass[tikz,margin=5pt]{standalone}
\usepackage{siunitx}
\usetikzlibrary{}

\newcommand{\Exp}[1]{%
    \ifnum#1=0
        1%
    \else
        \num{e#1}%
    \fi
    }

\begin{document}
\begin{tikzpicture}

\draw (0,0)--(9,0) ;

\xdef\L{1}
\foreach \n [count=\m from -2] in {0,...,8} {%
    \draw[thick] (\n,4pt)
        node[anchor=south,text depth=.5em]
        {\scriptsize\Exp{\m}}
        -- (\n,-4pt) 
        node[anchor=north,text height=.9em]
        {\scriptsize\pgfmathprintnumber\L}  ;
    \foreach \i [evaluate={\x=log10(\i)}] in {1,2,...,10}
        {\draw (\n+\x,-2pt) -- (\n+\x,+2pt) ; }
    \xdef\L{\L 0}   
}
    \draw[thick] (9,4pt)
        node[anchor=south,text depth=.5em]
        {\scriptsize\num{E7}}
        -- (9,-4pt) 
        node[anchor=north,text height=1em]
        {\scriptsize\pgfmathprintnumber\L}  ;
\end{tikzpicture}


\end{document}

答案2

您可以教 PGFPlots 只绘制单个轴(而不是框),而不绘制任何图:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    hide y axis,
    xmode=log,
    xmin=1e-2,
    xmax=1e2,
    ymin=0, ymax=1,
    y=1cm,
    xtick align=center,
    axis x line*=bottom,
    enlarge x limits={abs=\pgflinewidth, upper}
]
\end{axis}
\end{tikzpicture}
\end{document}

相关内容