Pgfplots: xtick é ignorado com intervalo ybar

Pgfplots: xtick é ignorado com intervalo ybar

Tenho um problema ao criar um gráfico de barra de demanda durante um dia. Minhas coordenadas x estão em "minutos a partir da meia-noite", mas quero mostrar a hora do dia no eixo x nos locais especificados (por exemplo, 6h30 em vez de 390 minutos). xticke xticklabelsdeveria fazer isso por mim. E eles fazem, quando eu não tenho ybar interval=1, mas aí não é mais o tipo certo de enredo.

Meu código é o seguinte:

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

e produz:

Os ticks estão colocados incorretamente

O comentário ybar interval=1,resulta em:

As marcas estão corretas, mas o tipo de gráfico está errado

Responder1

O manual (pág. 87 e 320 na minha versão) diz que ybar intervalé instalado apenas por parcela. Isso mexe com a definição dos ticks se você definir no eixo.

Eu adicionaria um enlarge x limits=0.05, enlarge y limits=upperàs opções do eixo, para ter um pouco de espaço para respirar no eixo.

Para usar a coloração padrão para os diagramas, você pode usar o ybarestilo genérico e então 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}

outro gráfico de barra

Responder2

Você poderia adicionar um segundo axisambiente com as mesmas dimensões:

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

insira a descrição da imagem aqui

informação relacionada