
Quero exibir a hora nosimeixo. Eu desenvolvi este código, mas ele não mostra nenhuma saída.
\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}
Responder1
Parece que você está tentando usar a dateplot
biblioteca, mas conforme descrito no manual, vocêprecisarpara especificar uma data, não apenas a hora:
Observe também que deveria ser date coordinates in=x
, não Time coordinates in=x
. Depois de adicionar uma data ao arquivo de entrada e ajustar os valores para xmin
/ xmax
de acordo:
\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}
Termo aditivo
Se, por outro lado, você está tentando usar a resposta do Símbolo 1 emComo criar um gráfico de data e hora com TikZ e pgfplotsentão veja o código abaixo. Teria sido ótimo se você tivesse mencionado isso na pergunta (embora eu suponha que poderia ter esperado até que você fornecesse mais informações, conforme solicitado por Frougon ...).
Você ainda precisa ter certeza de usar o nome correto para o estilo, o código do Símbolo 1 define time coordinates in
, você usou Time coordinates in
. Isso diferencia maiúsculas de minúsculas, portanto, você precisa usar as mesmas maiúsculas e minúsculas tanto na definição quanto no uso do estilo.
Noto que a legenda está vazia. Stefan Pinnow demonstra como obter uma lenda mais útil para ycomb
tramas emhttps://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}
Responder2
Como menciona Frougon, seu código está longe de estar completo. Talvez o seguinte vá na direção certa.
\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}