гистограмма + полигон частотности

гистограмма + полигон частотности

Это мой код

\documentclass[11pt,a4paper]{article} 
\usepackage{tikz}
\usepackage{tkz-euclide}
\usetikzlibrary{calc,intersections,through,backgrounds,snakes}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{statistics}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
width=1*\textwidth,
height=8cm,
ymin=0,
ymax=7,
title=Histogram lichaamslengte,
ybar interval,
xticklabel={[\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick [}],
\addplot+[hist={bins=4, data max=12,data min=0}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 4\\ 5\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ 11\\
};
\end{axis}
\tkzDefPoints{2.1/2.75/A, 4.3/3.7/B, 6.7/1.8/C, 9/5.5/D}
\tkzDrawPoints(A,B,C,D)
\tkzDrawSegment(A,B)
\tkzDrawSegment(B,C)
\tkzDrawSegment(C,D) 
\end{tikzpicture} 
\end{center}
\end{document}

Мне удалось сделать гистограмму, но я также хочу многоугольник частотности поверх гистограммы. Решение, которое я нашел, совсем нехорошо, потому что оно не масштабируемо. Поэтому мой вопрос в том, как мне сделать этот многоугольник, который использует класс-средние. Если возможно, то автоматически. Спасибо!

гистограмма + полигон частотности

решение1

Вы можете нарисовать гистограмму дважды: один раз как ybar intervalв вашем примере, а второй раз как sharp plot.

Чтобы визуализировать histсюжет по-другому, можно переопределить handlerстиль в параметрах hist:

введите описание изображения здесь

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections,through,backgrounds,snakes}
\usepackage{pgfplots}
\pgfplotsset{compat=1.8}
\usepgfplotslibrary{statistics}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
width=1*\textwidth,
height=8cm,
ymin=0,
ymax=7,
title=Histogram lichaamslengte,
ybar interval,
xticklabel={[\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick [}],
\addplot+[hist={bins=4, data max=12,data min=0}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 4\\ 5\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ 11\\
};

\addplot[
    %
    % there seems to be a bug in pgfplots which would shift the two
    % 'hist' plots as if both were bar plots.
    % This is one possible work-around:
    forget plot,
    %
mark=*,
    hist={bins=4, data max=12,data min=0,
        % this here should *not* become an ybar interval:
        handler/.style={sharp plot},intervals=false,
    },
    %
    % .. but since the other plot is shown with intervals, we should
    % shift this here accordingly:
    shift={(axis direction cs:1.5,0)},
]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 4\\ 5\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ 11\\
};
\end{axis}
\end{tikzpicture} 
\end{document}

Этот эксперимент показал мне, что есть возможности для улучшений:

  1. без forget plot, pgfplotsпредполагает, что есть две столбчатые диаграммы и делает "обе" меньше. Это ошибка; forget plotодин из возможных обходных путей (другой способ - изменить bar interval widthи bar interval shiftдляпервыйсюжет). Я сделаю заметку о том, что нужно сделать pgfplots; со временем это станет ненужным.

  2. нужно ввести, interval=falseхотя из контекста ясно, что sharp plotинтервал не нужен. Я сделаю заметку todo для pgfplots; это станет ненужным в конечном итоге.

Я проверю обработчик гистограмм и исправлю связанные с ним ошибки и проблемы с удобством использования (вероятно, в следующей версии pgfplots).

решение2

В качестве частичного ответа можно использовать

xmin=0,xmax=12,name=border,

внутри определения xaxis вы можете создать масштабируемые координаты, например

\coordinate (Y) at ($.143*(border.north) - .143*(border.south)$);
\coordinate (A) at ($(border.south west)!.125!(border.south east) + 3*(Y)$);

где (Y) — длина одной единицы вертикального изменения. Однако вам все равно нужно рассчитать значения гистограммы (снова) или узнать, куда их поместил Tikz.

решение3

\begin{tikzpicture}
\begin{axis}[
width=1*\textwidth,
height=9cm,
xmin=-1,xmax=13,
ymin=0, ymax=7,
title=Histogram lichaamslengte,
ybar interval,
xticklabel={[\pgfmathprintnumber\tick;\pgfmathprintnumber\nexttick [}],
\addplot+[hist={bins=4, data max=12,data min=0}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\ 4\\ 5\\ 7\\ 10\\ 9\\ 8\\ 9\\ 9\\ 11\\
};
\addplot[sharp plot,mark=square]
coordinates
{(1.5,3) (4.5,4) (7.5,2) (10.5,6)};
\end{axis}
\end{tikzpicture}

Отвечая на свои собственные вопросы, вы чувствуете себя так, как будто мистер Бим рассылает открытки самому себе. Но в любом случае, спасибо за ответы. После изучения руководства по pgf, для меня самым простым способом является добавление графика с координатами, это масштабируемо и не занимает много времени.

В результате чего:

решение

Связанный контент