Distancia entre barras con pgfplot

Distancia entre barras con pgfplot

En lugar de eso, quiero crear un gráfico de barras con barras espaciadas uniformemente, como en el primer ejemplo, espaciadas por los valores utilizados. Pensé que se podrían usar coordenadas x simbólicas para esto, pero usarlo produce muchos errores como

Error de pgfplots del paquete: Lo sentimos, la coordenada de entrada `1.0' no se ha definido como [normalizada]1.0?. ...tabla[x índice=0, y índice=1]{\loadedtable};

\documentclass{standalone}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}
    \pgfplotstableread{
        Note Anzahl
        1.0 1
        1.3 1.3
        1.7 1.7
        2.0 2
        2.3 2.3
        2.7 2.7
        3.0 3
        3.3 3.3
        3.7 3.7
        4.0 4
        4.7 4.7
        5.0 5
    }\loadedtable

%Looks good but the spacing is wrong
    \begin{tikzpicture}
    \begin{axis}[xtick=data, x=15ex, bar width=3ex,  xticklabels={{1,0},{1,3},{1,7},{2,0},{2,3},{2,7},{3,0},{3,3},{3,7},{4,0},{4,7},{5,0}},]
    \addplot[ybar] table[x index=0, y index=1]{\loadedtable};
    \end{axis}
    \end{tikzpicture}

%Here the error occurs
    \begin{tikzpicture}
    \begin{axis}[xtick=data, x=15ex, bar width=3ex, symbolic x coords={{1,0},{1,3},{1,7},{2,0},{2,3},{2,7},{3,0},{3,3},{3,7},{4,0},{4,7},{5,0}},]
    \addplot[ybar] table[x index=0, y index=1]{\loadedtable};
    \end{axis}
    \end{tikzpicture}
\end{document}

Respuesta1

Aquí una respuesta un poco mejorada dedaleifdonde no es necesario escribir explícitamente cada coordenada simbólica. También hay algunos cambios que surgieron después de una discusión en los comentarios.

Para más detalles, eche un vistazo a los comentarios en el código.

% used PGFPlots v1.15
    \begin{filecontents*}{Note.txt}
        Note
        1,0
        1,3
        1,7
        2,0
        2,3
        2,7
        3,0
        3,3
        3,7
        4,0
        4,7
        5,0
    \end{filecontents*}
    \begin{filecontents*}{NotenVerteilung.txt}
        Note Anzahl
        1.0 1
        1.3 1.3
        1.7 1.7
        2.0 2
        2.3 2.3
        2.7 2.7
        3.0 3
        3.3 3.3
        3.7 3.7
        4.0 4
        4.7 4.7
        5.0 5
    \end{filecontents*}
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        x=5ex,
        ybar,
        bar width=3ex,
        xtick=data,
        % load labels from the file
        xticklabels from table={Note.txt}{Note},
    ]
        \addplot table [
            % use the index for the internal number/label
            x expr=\coordindex,
            y=Anzahl,
        ]{NotenVerteilung.txt};
    \end{axis}
\end{tikzpicture}
\end{document}

imagen que muestra el resultado del código anterior

Respuesta2

El argumento symbolic x coordstiene que ser exactamente la lista de x entradas de los datos. De lo contrario obtienes el error que mencionas. Corrija ese error y quedará bien espaciado como lo solicitó.

\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\begin{document}
    \pgfplotstableread{
        Note Anzahl
        1.0 1
        1.3 1.3
        1.7 1.7
        2.0 2
        2.3 2.3
        2.7 2.7
        3.0 3
        3.3 3.3
        3.7 3.7
        4.0 4
        4.7 4.7
        5.0 5
    }\loadedtable

    \begin{tikzpicture}
      \begin{axis}[xtick=data,
        x=5ex,
        bar width=3ex,
        symbolic x coords={1.0,1.3,1.7,2.0,2.3,2.7,3.0,3.3,3.7,4.0,4.7,5.0},
        ]
    \addplot[ybar] table[x index=0, y index=1]{\loadedtable};
    \end{axis}
    \end{tikzpicture}
\end{document}

Sería bueno simplemente decirle que use los datos distribuidos de manera uniforme, pero no tengo idea de cómo hacerlo, tal vez otros sí.

ingrese la descripción de la imagen aquí

Respuesta3

Éste es otro compromiso que ahora decidí utilizar. Aún mejor que usar tanto el symbolic x coordscomo el xticklabels.

\documentclass{minimal}

\usepackage{pgfplots}
\usepackage{pgfplotstable}

\begin{document}
    \pgfplotstableread{
        Note Anzahl
        1.0 1
        1.3 1.3
        1.7 1.7
        2.0 2
        2.3 2.3
        2.7 2.7
        3.0 3
        3.3 3.3
        3.7 3.7
        4.0 4
        4.7 4.7
        5.0 5
    }\loadedtable

    \begin{tikzpicture}
    \begin{axis}[xtick=data, x=5ex, bar width=3ex, xticklabels={{1,0},{1,3},{1,7},{2,0},{2,3},{2,7},{3,0},{3,3},{3,7},{4,0},{4,7},{5,0}}]
    \addplot[ybar] table[x expr=\coordindex, y index=1]{\loadedtable};
    \end{axis}
    \end{tikzpicture}
\end{document}

Es una combinación del uso xticklabelsy la solución deStefan Pinnowusando el x expr=\coordindex.

información relacionada