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}
Respuesta2
El argumento symbolic x coords
tiene 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í.
Respuesta3
Éste es otro compromiso que ahora decidí utilizar. Aún mejor que usar tanto el symbolic x coords
como 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 xticklabels
y la solución deStefan Pinnowusando el x expr=\coordindex
.