pgfplots:如何将任意文本放在 X 轴上?

pgfplots:如何将任意文本放在 X 轴上?

我有一个相当基本的情节,像这样(这里为了简洁只有三个值):

 \documentclass{standalone}

 \usepackage{pgfplots}

 \begin{document}
 \begin{tikzpicture}
 \begin{axis} [
 axis y line*=left,
 xlabel=$t$,
 ylabel=$SomeUnit$,
 no marks,
 legend cell align={left},
 legend style={at={(0,-0.1)},anchor=north west}
 ]

 \addplot coordinates {
    (0.000000,2.2604616420110846)
    (0.059999,2.4530650447747706)
    (0.119999,2.4052869003392985)
 };
 \addlegendentry{Foo}

 \addplot coordinates {
    (0.000000,7.09148443572902)
    (0.059999,7.167237825210513)
    (0.119999,7.048386141043992)
 };
 \addlegendentry{Bar}

 \end{axis}
 \end{tikzpicture}
 \end{document}

该 TeX 代码由另一个程序生成。

当我渲染它时,它看起来如预期的那样: 渲染图

我现在需要的是 X 轴上的文本刻度。X 轴表示时间点(以秒为单位),“0”是具体日期,比如说 2018-09-10 13:37:58。因此,我想要:

  1. 整个日期作为第一个刻度
  2. 只有另一边的时间在滴答作响
  3. 每当新的一天开始的时候(有时测量会在夜间进行),新的日期就会出现一个勾号

我如何实现这个目标?

答案1

一个开始(可能很简单)的方法是使用lua-scripts并编译你的文档lualatex。话虽如此,你可以得到类似的东西:

\documentclass{article} 
\usepackage{luacode}
%https://tex.stackexchange.com/questions/147698/unix-timestamp-seconds-since-1-1-1970-in-document
\begin{luacode*}
    function epoch (time)
    fmt = "%m-%d-%Y %X"
    tex.sprint(os.date(fmt, time))
    end
\end{luacode*}

\newcommand\epoch[1]{\directlua{epoch(#1)}}
%
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
axis y line*=left,
xlabel=$t$,
ylabel=$SomeUnit$,
no marks,
legend cell align={left},
legend style={at={(0,-0.1)},anchor=north west},
xtick = data,
xticklabels={\epoch{1536579478}},
xticklabel style={rotate=45, anchor=east}
]

\addplot coordinates {
    (0.000000,2.2604616420110846)
    (0.059999,2.4530650447747706)
    (0.119999,2.4052869003392985)
};
\addlegendentry{Foo}

\addplot coordinates {
    (0.000000,7.09148443572902)
    (0.059999,7.167237825210513)
    (0.119999,7.048386141043992)
};
\addlegendentry{Bar}

\end{axis}
\end{tikzpicture}
\end{document}

这将为您提供:

在此处输入图片描述

UNIX您可以自行填写时间,也可以调整lua代码以满足您的需要。

相关内容