
Estou tentando desenhar um histograma de 8 compartimentos de largura 10. Isso é o que tenho atualmente, onde a largura do meu compartimento é notavelmente muito menor que 10 unidades.
\begin{tikzpicture}
\begin{axis} [ybar,xmin=70,xmax=160,ymin=0,ymax=20, xlabel = IQ Scores, ylabel = Frequency, xtick={70, 80, 90, 100, 110, 120, 130, 140, 150}]
\addplot [draw = black, fill = gray] coordinates {
(75,2)
(85,3)
(95, 10)
(105, 16)
(115, 13)
(125, 10)
(135, 5)
(145,1)
};
\end{axis}
\end{tikzpicture}
Basicamente, preciso que as barras se toquem. Alguma idéia do que preciso fazer?
Responder1
Uma maneira de fazer isso é usar ybar interval
(observe a ligeira diferença na posição do tick no eixo x)
\begin{tikzpicture}
\begin{axis} [ybar interval,
grid=none,
xmin=70,xmax=160,ymin=0,ymax=20, xlabel = IQ Scores, ylabel = Frequency, xtick={70, 80, 90, 100, 110, 120, 130, 140, 150}]
\addplot [draw = black, fill = gray] coordinates {
(75,2)
(85,3)
(95, 10)
(105, 16)
(115, 13)
(125, 10)
(135, 5)
(145,1)
(155,0)
};
\end{axis}
\end{tikzpicture}
Responder2
Você pode definir a largura unitária do eixo x (por exemplo x=0.1cm
) e a largura da barra ( bar width=1cm
já que o tamanho do passo é 10).
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
ybar,
x=0.1cm,
bar width=1cm,
xmin=70,
xmax=160,
ymin=0,
ymax=20,
xlabel=IQ Scores,
ylabel=Frequency,
xtick={70, 80, 90, 100, 110, 120, 130, 140, 150}
]
\addplot [draw = black, fill = gray] coordinates {
(75,2)
(85,3)
(95, 10)
(105, 16)
(115, 13)
(125, 10)
(135, 5)
(145,1)
};
\end{axis}
\end{tikzpicture}
\end{document}