我正在尝试使用 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^1
2*10^-2
3*10^-2
xshift=\x*\unit
xshift=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}