
Quiero mostrar la hora en elyeje. He desarrollado este código, pero no muestra ningún resultado.
\usepackage{filecontents}
\begin{filecontents}{mwe.csv}
Time,a,b
00:00,0,10
10:30,6,4
11:30,5,5
12:30,3,7
13:30,2,8
\end{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
Time coordinates in=x,
xticklabel={\begin{turn}{45}\hour.\minute \end{turn}\\},
x tick label style={align=center},
ymajorgrids,
xmin={00:00},
xmax={21:30},
ymin=00:00,
legend pos=north west,]
\addplot [ycomb,color=blue] table [col sep=comma,trim cells=true,y=a] {mwe.csv}; \addlegendentry{a}
\addplot [ycomb,color=red] table [col sep=comma,trim cells=true,y=b] {mwe.csv}; \addlegendentry{b}
\end{axis}
\end{tikzpicture}
\end{document}
Respuesta1
Parece como si estuvieras intentando usar eldateplot
biblioteca, pero como se describe en el manual,necesidadpara especificar una fecha, no solo la hora:
Tenga en cuenta también que debería serlo date coordinates in=x
, no Time coordinates in=x
. Después de agregar una fecha al archivo de entrada y ajustar los valores de xmin
/ xmax
en consecuencia:
\begin{filecontents}{mwe.csv}
Time,a,b
2020-1-1 00:00,0,10
2020-1-1 10:30,6,4
2020-1-1 11:30,5,5
2020-1-1 12:30,3,7
2020-1-1 13:30,2,8
\end{filecontents}
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
date coordinates in=x,
xticklabel={\hour.\minute},
x tick label style={align=center,rotate=45},
ymajorgrids,
xmin={2020-1-1 00:00},
xmax={2020-1-1 21:30},
legend pos=north west
]
\addplot [ycomb,color=blue] table [col sep=comma,y=a] {mwe.csv};
\addlegendentry{a}
\addplot [ycomb,color=red] table [col sep=comma,y=b] {mwe.csv};
\addlegendentry{b}
\end{axis}
\end{tikzpicture}
\end{document}
Apéndice
Si, por otro lado, estás intentando utilizar la respuesta del Símbolo 1 enCómo crear un gráfico de fecha y hora con TikZ y pgfplotsluego vea el código a continuación. Hubiera sido genial si hubieras mencionado esto en la pregunta (aunque supongo que podría haber esperado hasta que proporcionaras más información, como me solicitó frougon...).
Aún debes asegurarte de usar el nombre correcto para el estilo, el código del Símbolo 1 lo define time coordinates in
, que usaste Time coordinates in
. Esto distingue entre mayúsculas y minúsculas, por lo que debe utilizar el mismo caso tanto en la definición como en el uso del estilo.
Observo que la leyenda está vacía. Stefan Pinnow demuestra cómo conseguir una leyenda más útil paraycomb
las tramas enhttps://tex.stackexchange.com/a/357469/.
\begin{filecontents*}{mwe.csv}
Time,a,b
00:00,0,10
10:30,6,4
11:30,5,5
12:30,3,7
13:30,2,8
\end{filecontents*}
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
% the following is from https://tex.stackexchange.com/a/288225/
\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},
x tick label style={align=center,rotate=45},
ymajorgrids,
xmin={00:00},
xmax={21:30},
legend pos=north west,
]
\addplot [ycomb, draw=blue] table [col sep=comma,trim cells=true,y=a] {mwe.csv};
\addlegendentry{a}
\addplot [ycomb,color=red] table [col sep=comma,trim cells=true,y=b] {mwe.csv};
\addlegendentry{b}
\end{axis}
\end{tikzpicture}
\end{document}
Respuesta2
Como menciona frougon, su código está lejos de estar completo. Quizás lo siguiente vaya en la dirección correcta.
\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepgfplotslibrary{dateplot}
\usepackage{filecontents}
\begin{filecontents}{mwe.csv}
Time,a,b
00:00,0,10
10:30,6,4
11:30,5,5
12:30,3,7
13:30,2,8
\end{filecontents}
\usepackage{xfp}
% from https://tex.stackexchange.com/a/445564/121799
\def\marmottimeparseaux#1:#2xxx{#1* 60 + #2}
\ExplSyntaxOn
\cs_new:Nn \marmot_timeparse:n { \marmottimeparseaux #1xxx }
\newcommand\TimeParse[1]{\exp_args:Nf\marmot_timeparse:n {#1}}
\ExplSyntaxOff
\pgfplotsset{
/pgfplots/ycomb legend/.style={
/pgfplots/legend image code/.code={%
\path (0cm,0cm) (0.6cm,0.3cm);
\draw [#1] (0.3cm,-0.1cm) -- (0.3cm,0.2cm);},
},
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ycomb,ycomb legend,
xticklabel={\pgfmathtruncatemacro{\myhour}{\tick/60}%
\pgfmathtruncatemacro{\myminute}{\tick-\myhour*60}%
\myhour:\myminute},
x tick label style={align=center},
ymajorgrids,
xmin=\TimeParse{00:-10},
xmax=\TimeParse{21:30},
ymin=0,
legend pos=north west,]
\addplot [color=blue,xshift=-2pt] table [col sep=comma,y=a,
x expr=\TimeParse{\thisrow{Time}}] {mwe.csv};
\addlegendentry{a}
\addplot [ycomb,color=red,xshift=2pt] table [col sep=comma,trim cells=true,y=b,
x expr=\TimeParse{\thisrow{Time}}] {mwe.csv};
\addlegendentry{b}
\end{axis}
\end{tikzpicture}
\end{document}