Приложение

Приложение

Я хочу, чтобы время отображалось науось. Я разработал этот код, но он не показывает никаких выходных данных.

\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}

решение1

Похоже, что вы пытаетесь использовать библиотеку dateplot, но, как описано в руководстве, вынуждатьсячтобы указать дату, а не только время:

введите описание изображения здесь

Обратите внимание, что должно быть date coordinates in=x, а не Time coordinates in=x. После добавления даты во входной файл и соответствующей корректировки значений для xmin/ :xmax

\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}

введите описание изображения здесь

Приложение

Если, с другой стороны, вы пытаетесь использовать ответ Символа 1Как создать график даты и времени с помощью TikZ и pgfplotsзатем см. код ниже. Было бы здорово, если бы вы упомянули это в вопросе (хотя, полагаю, я мог бы подождать, пока вы не предоставите больше информации, как просил frougon ...).

Вам все еще нужно убедиться, что вы используете правильное имя для стиля, код Symbol 1 определяет time coordinates in, вы использовали Time coordinates in. Это чувствительно к регистру, поэтому вам нужно использовать тот же регистр как в определении стиля, так и в использовании.

Я заметил, что легенда пуста. Стефан Пиннов демонстрирует, как получить более полезную легенду для ycombучастков вhttps://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}

решение2

Как упоминает frougon, ваш код далек от завершения. Возможно, следующее пойдет в правильном направлении.

\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}

введите описание изображения здесь

Связанный контент