这是我想要编译的代码:
\documentclass{article}
\usepackage{tikz, pgfplots}
\usepgfplotslibrary{dateplot}
% from https://tex.stackexchange.com/a/288225/231104
\def\pgfplotslibdateplothour:minutetofloat#1:#2.{
\pgfmathparse{#1+#2/60}
}
\def\pgfplotslibdateplofloattothour:minute#1.{
\pgfmathsetmacro\hour{int(floor(#1))}
\pgfmathsetmacro\minute{int((#1-\hour)*60)}
\ifnum\hour<10\edef\hour{0\hour}\fi
\ifnum\minute<10\edef\minute{0\minute}\fi
}
\pgfplotsset{
/pgfplots/time coordinates in/.code={%
\pgfkeysdef{/pgfplots/#1 coord trafo}{%
\pgfplotslibdateplothour:minutetofloat##1.
}
\pgfkeysdef{/pgfplots/#1 coord inv trafo}{
\pgfplotslibdateplofloattothour:minute##1.
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
time coordinates in=x,
xticklabel={\hour:\minute},
]
\addplot coordinates {
(10:00, 0)
(10:30, 25)
(10:40, 28)
(11:00, 40)
(11:15, 42)
(11:30, 50)
};
\end{axis}
\end{tikzpicture}
\end{document}
但在编译时,它只会给出“出现错误”的标志。似乎代码缺少了一些重要的东西,但我找不到是什么。
请帮忙,谢谢!
答案1
这PGFPLOTS 手册在用户转换章节中提到(版本 1.17 的第 386 页):
评论: 可能需要进行设置
\pgfplotsset{ xticklabel={\tick}, scaled x ticks=false, plot coordinates/math parser=false, }
以避免使用数字格式化例程\tick
或刻度刻度方法的数字。
一些实验表明,plot coordinates/math parser=false
在这种情况下只需要。这允许代码中定义的函数将例如 10:30 转换为 10.5,PGFplots 可以使用它来找到 x 轴上的正确位置。
另一个问题是逆变换,例如从 10.5 回到 10:30。因为浮点到小时函数的模式.
中有一个,即,所以只看到,然后假设参数是完整的。将其更改为,例如可修复此问题,因此,在函数头中,也在 内的调用中。10.5
floattothour:minute#1.
10
:
floattothour:minute#1:
coord inv trafo
梅威瑟:
\documentclass{article}
\usepackage{tikz, pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{dateplot}
% from https://tex.stackexchange.com/a/288225/231104
\def\pgfplotslibdateplothour:minutetofloat#1:#2.{
\pgfmathparse{#1+#2/60}
}
\def\pgfplotslibdateplofloattothour:minute#1:{
\pgfmathsetmacro\hour{int(floor(#1))}
\pgfmathsetmacro\minute{int((#1-\hour)*60)}
\ifnum\hour<10\edef\hour{0\hour}\fi
\ifnum\minute<10\edef\minute{0\minute}\fi
}
\pgfplotsset{
/pgfplots/time coordinates in/.code={%
\pgfkeysdef{/pgfplots/#1 coord trafo}{%
\pgfplotslibdateplothour:minutetofloat##1.
}
\pgfkeysdef{/pgfplots/#1 coord inv trafo}{
\pgfplotslibdateplofloattothour:minute##1:
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
plot coordinates/math parser=false,
time coordinates in=x,
xticklabel={\hour:\minute},
]
\addplot coordinates {
(10:00, 0)
(10:30, 25)
(10:40, 28)
(11:00, 40)
(11:15, 42)
(11:30, 50)
};
\end{axis}
\end{tikzpicture}
\end{document}
结果: