代码

代码

我创建了一个自定义的 pgfplot 样式,它允许我创建线图,其中 x 轴是时间hh:mm格式的线图。数据加载自.csv文件。

x 轴上的自动刻度放置很好,但我想确保第一个和最后一个数据点都有刻度。x 轴范围和数据点数量各不相同,所以我宁愿避免手动放置刻度。

有没有办法强制在第一个和最后一个数据点上打勾,同时自动放置所有勾号?

代码

\documentclass{article}

\usepackage{pgfplots}

\def\removeleadingzeros#1{\if0#1 \expandafter\else#1\fi}

\def\transformtime#1:#2:#3!{
    \pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
    \pgfmathparse{\removeleadingzeros#1*3600+\removeleadingzeros#2*60+\removeleadingzeros#3}
    \pgfkeys{/pgf/fpu=false}
}

\pgfplotsset{
    timeplot/.style={
        x coord trafo/.code={\expandafter\transformtime##1!},
        x coord inv trafo/.code={%
            \pgfkeys{/pgf/fpu=true,/pgf/fpu/output format=fixed}
            \pgfmathsetmacro\hours{floor(##1/3600)}
            \pgfmathsetmacro\minutes{floor((##1-\hours*3600)/60)}
            \def\pgfmathresult{\pgfmathparse{mod(\hours,60)<10?"0":{},int(mod(\hours,60))}\pgfmathresult:\pgfmathparse{mod(\minutes,60)<10?"0":{},int(mod(\minutes,60))}\pgfmathresult}
            \pgfkeys{/pgf/fpu=false}
        },
        scaled x ticks=false,
        xticklabel=\tick,
        ymin=0,
        grid=major,
        width=\linewidth
    }
}

\begin{filecontents*}{juli.csv}
12:22:00,181
12:37:00,180
12:52:00,176
13:07:00,171
13:22:00,164
13:37:00,156
13:52:00,146
14:07:00,134
14:22:00,121
\end{filecontents*}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[timeplot]
            \addplot [mark=none] table [col sep=comma] {juli.csv};
        \end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容