Pgfplots: xtick игнорируется с интервалом ybar

Pgfplots: xtick игнорируется с интервалом ybar

У меня проблема с созданием столбчатой ​​диаграммы спроса в течение дня. Мои x-координаты находятся в "минутах от полуночи", но я хочу показать время дня на оси x в указанных мной точках (например, 6:30 утра вместо 390 минут). xtickи xticklabelsдолжны сделать это за меня. И они делают это, когда у меня нет ybar interval=1, но тогда это уже не тот тип графика.

Мой код следующий:

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}
        \begin{axis}[
            xtick={390,540,720,900,1020},
            xticklabels={6:30,9:00,12:00,15:00,17:00},
            ylabel=Required staff,
            xlabel=Time of day,
            ybar interval=1,
            width=0.8\textwidth,
            height=5cm,
            axis lines=left,
            ymin=0
        ]
            \addplot 
                coordinates {(390,1) (450,2) (510,3) (570,6) (720,3) (735,2) (780,3) (795,4) (930,2) (960,1) (1020,1)};
        \end{axis}
    \end{tikzpicture}
\end{figure}
\end{document}

и он производит:

Галочки расставлены неправильно

Результаты ybar interval=1,:

Галочки верны, но тип графика неверный

решение1

В руководстве (стр. 87 и 320 в моей версии) говорится, что это ybar intervalустанавливается только на основе графика. Это портит определение отметок, если вы устанавливаете его на оси.

Я бы добавил enlarge x limits=0.05, enlarge y limits=upperк параметрам оси «a», чтобы иметь немного пространства для маневра на оси.

Чтобы использовать для диаграмм цветовую гамму по умолчанию, можно использовать общий ybarстиль, а затем addplot+:

\documentclass{article}
\usepackage{pgfplots}\pgfplotsset{compat=1.13}
\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}
        \begin{axis}[
            ybar, %% installs bar cycle list also
            xtick={390,540,720,900,1020},
            xticklabels={6:30,9:00,12:00,15:00,17:00},
            ylabel=Required staff,
            xlabel=Time of day,
            width=0.8\textwidth,
            height=5cm,
            axis lines=left,
            ymin=0,
            enlarge x limits=0.05,
            enlarge y limits=upper,
        ]
        \addplot+ [ybar interval]
                coordinates {(390,1) (450,2) (510,3) (570,6) (720,3) (735,2) (780,3) (795,4) (930,2) (960,1) (1020,1)};
        \end{axis}
    \end{tikzpicture}
\end{figure}
\end{document}

еще один участок бара

решение2

Вы можете добавить вторую axisсреду с такими же размерами:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}% <- current version is 1.14
\begin{document}
\begin{figure}
    \centering
    \begin{tikzpicture}
        \pgfplotsset{
            xmin=390,xmax=1020,
            width=0.8\textwidth,
            height=5cm,
            axis lines=left,
            ymin=0,ymax=6
        }
        \begin{axis}[
            xtick={390,540,720,900,1020},
            xticklabels={6:30,9:00,12:00,15:00,17:00},
            ylabel=Required staff,
            xlabel=Time of day
        ]
        \end{axis}
        \begin{axis}[
            axis lines=none,
            ybar interval=1,
            xtick=\empty,
        ]
            \addplot 
                coordinates {
                    (390,1) (450,2) (510,3) (570,6) (720,3) (735,2)
                    (780,3) (795,4) (930,2) (960,1) (1020,1)
                };
        \end{axis}
    \end{tikzpicture}
\end{figure}
\end{document}

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

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