Pgfplots: xtick wird mit ybar-Intervall ignoriert

Pgfplots: xtick wird mit ybar-Intervall ignoriert

Ich habe ein Problem mit der Erstellung eines Balkendiagramms der Nachfrage während eines Tages. Meine X-Koordinaten sind in „Minuten ab Mitternacht“, aber ich möchte die Tageszeit auf der X-Achse an den von mir angegebenen Stellen anzeigen (z. B. 6:30 Uhr statt 390 Minuten). xtickund xticklabelssollte das für mich tun. Und das tun sie, wenn ich nicht habe ybar interval=1, aber dann ist es nicht mehr die richtige Art von Diagramm.

Mein Code ist der folgende:

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

und es erzeugt:

Häkchen sind falsch gesetzt

Das Auskommentieren ybar interval=1,führt zu:

Die Häkchen sind korrekt, aber der Plottyp ist falsch

Antwort1

Im Handbuch (Seite 87 und 320 in meiner Version) steht, dass dies ybar intervalnur pro Plot installiert wird. Es bringt die Definition der Teilstriche durcheinander, wenn Sie es in der Achse festlegen.

Ich würde enlarge x limits=0.05, enlarge y limits=upperden Achsenoptionen ein hinzufügen, um auf der Achse etwas Spielraum zu haben.

Um die Standardfarbgebung für die Diagramme zu verwenden, können Sie den allgemeinen ybarStil verwenden und dann 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}

ein weiteres Balkendiagramm

Antwort2

Sie könnten eine zweite axisUmgebung mit denselben Abmessungen hinzufügen:

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

Bildbeschreibung hier eingeben

verwandte Informationen