В этому уроке изучим особенности работы со столбчатой и круговой диаграммами.
Столбчатые диаграммы
Для визуализации категориальных данных хорошо подходят столбчатые диаграммы. Для их построения используются функции:
bar() – для построения вертикальной диаграммы
barh() – для построения горизонтальной диаграммы.
Построим простую диаграмму:
np.random.seed(123) groups = [f"P{i}" for i in range(7)] counts = np.random.randint(3, 10, len(groups)) plt.bar(groups, counts)
Если заменим bar() на barh() получим горизонтальную диаграмму:
plt.barh(groups, counts)
Рассмотрим более подробно параметры функции bar():
Основные параметры:
- x: набор величин
- x координаты столбцов
- height : скалярная величина или набор величин
- Высоты столбцов
- width: скалярная величина, массив или optional
- Ширина столбцов
- bottom: скалярная величина, массив или optional
- y координата базы
- align : {‘center’, ‘edge’}, optional, значение по умолчанию: ‘center’
- Выравнивание по координате x.
Дополнительные параметры:
- color: скалярная величина, массив или optional
- Цвет столбцов диаграммы
- edgecolor: скалярная величина, массив или optional
- Цвет границы столбцов
- linewidth: скалярная величина, массив или optional
- Ширина границы
- tick_label: str, массив или optional
- Метки для столбца
- xerr, yerr: скалярная величина, массив размера shape(N,) или shape(2,N) или optional
- Величина ошибки для графика. Выставленное значение удаляется/прибавляется к верхней (правой – для горизонтального графика) границе. Может принимать следующие значения:
- скаляр: симметрично +/- для всех баров
- shape(N,): симметрично +/- для каждого бара
- shape(2,N): выборочного – и + для каждого бара. Первая строка содержит нижние значения ошибок, вторая строка – верхние.
- None: не отображать значения ошибок. Это значение используется по умолчанию.
- Величина ошибки для графика. Выставленное значение удаляется/прибавляется к верхней (правой – для горизонтального графика) границе. Может принимать следующие значения:
- ecolor: скалярная величина, массив или optional, значение по умолчанию: ‘black’
- Цвет линии ошибки.
- log: bool, optional, значение по умолчанию: False
- Включение логарифмического масштаба для оси y
- orientation : {‘vertical’, ‘horizontal’}, optional
- Ориентация: вертикальная или горизонтальная.
Построим более сложный пример, демонстрирующий работу с параметрами:
import matplotlib.colors as mcolors bc = mcolors.BASE_COLORS np.random.seed(123) groups = [f"P{i}" for i in range(7)] counts = np.random.randint(0, len(bc), len(groups)) width = counts*0.1 colors = [["r", "b", "g"][int(np.random.randint(0, 3, 1))] for _ in counts] plt.bar(groups, counts, width=width, alpha=0.6, bottom=2, color=colors, edgecolor="k", linewidth=2)
Групповые столбчатые диаграммы
Используя определенным образом подготовленные данные можно строить групповые диаграммы:
cat_par = [f"P{i}" for i in range(5)] g1 = [10, 21, 34, 12, 27] g2 = [17, 15, 25, 21, 26] width = 0.3 x = np.arange(len(cat_par)) fig, ax = plt.subplots() rects1 = ax.bar(x - width/2, g1, width, label='g1') rects2 = ax.bar(x + width/2, g2, width, label='g2') ax.set_title('Пример групповой диаграммы') ax.set_xticks(x) ax.set_xticklabels(cat_par) ax.legend()
Диаграмма с errorbar элементом
Errorbar элемент позволяет задать величину ошибки для каждого элемента графика. Для этого используются параметры xerr, yerr и ecolor (для задания цвета):
np.random.seed(123) rnd = np.random.randint cat_par = [f"P{i}" for i in range(5)] g1 = [10, 21, 34, 12, 27] error = np.array([[rnd(2,7),rnd(2,7)] for _ in range(len(cat_par))]).T fig, axs = plt.subplots(1, 2, figsize=(10, 5)) axs[0].bar(cat_par, g1, yerr=5, ecolor="r", alpha=0.5, edgecolor="b", linewidth=2) axs[1].bar(cat_par, g1, yerr=error, ecolor="r", alpha=0.5, edgecolor="b", linewidth=2)
Круговые диаграммы
Классическая круговая диаграмма
Круговые диаграммы – это наглядный способ показать доли компонент в наборе. Они идеально подходят для отчетов, презентаций и т.п. Для построения круговых диаграмм в Matplotlib используется функция pie().
Пример построения диаграммы:
vals = [24, 17, 53, 21, 35] labels = ["Ford", "Toyota", "BMV", "AUDI", "Jaguar"] fig, ax = plt.subplots() ax.pie(vals, labels=labels) ax.axis("equal")
Рассмотрим параметры функции pie():
- x: массив
- Массив с размерами долей.
- explode: массив, optional, значение по умолчанию:None
- Если параметр не равен None, то часть долей, который перечислены в передаваемом значении будут вынесены из диаграммы на заданное расстояние, пример диаграммы:
- labels: list, optional, значение по умолчанию:None
- Текстовые метки долей.
- colors: массив, optional, значение по умолчанию: None
- Цвета долей.
- autopct: str, функция, optional, значение по умолчанию: None
- Формат текстовой метки внутри доли, текст – это численное значение показателя, связанного с конкретной долей.
- pctdistance: float, optional, значение по умолчанию: 0.6
- Расстояние между центром каждой доли и началом текстовой метки, которая определяется параметром autopct.
- shadow: bool, optional, значение по умолчанию:False
- Отображение тени для диаграммы.
- labeldistance: float, None, optional, значение по умолчанию: 1.1
- Расстояние, на котором будут отображены текстовые метки долей. Если параметр равен None, то метки не будет отображены.
- startangle: float, optional, значение по умолчанию:None
- Задает угол, на который нужно повернуть диаграмму против часовой стрелке относительно оси x.
- radius: float, optional, значение по умолчанию:None
- Величина радиуса диаграммы.
- counterclock: bool, optional, значение по умолчанию:True
- Определяет направление вращения – по часовой или против часовой стрелки.
- wedgeprops: dict, optional, значение по умолчанию:None
- Словарь параметров, определяющих внешний вид долей.
- textprops: dict, optional, значение по умолчанию:None
- Словарь параметров определяющих внешний вид текстовых меток.
- center: list значений float, optional, значение по умолчанию: (0, 0)
- Центр диаграммы.
- frame: bool, optional, значение по умолчанию:False
- Если параметр равен True, то вокруг диаграммы будет отображена рамка.
- rotatelabels: bool, optional, значение по умолчанию:False
- Если параметр равен True, то текстовые метки будут повернуты на угол.
Создадим пример, в котором продемонстрируем работу с параметрами функции pie():
vals = [24, 17, 53, 21, 35] labels = ["Ford", "Toyota", "BMV", "AUDI", "Jaguar"] explode = (0.1, 0, 0.15, 0, 0) fig, ax = plt.subplots() ax.pie(vals, labels=labels, autopct='%1.1f%%', shadow=True, explode=explode, wedgeprops={'lw':1, 'ls':'--','edgecolor':"k"}, rotatelabels=True) ax.axis("equal")
Вложенные круговые диаграммы
Рассмотрим пример построения вложенной круговой диаграммы. Такая диаграмма состоит из двух компонент: внутренняя ее часть является детальным представлением информации, а внешняя – суммарную по заданным областям. Каждая область представляет собой список численных значений, вместе они образуют общий набор данных. Рассмотрим на примере:
fig, ax = plt.subplots() offset=0.4 data = np.array([[5, 10, 7], [8, 15, 5], [11, 9, 7]]) cmap = plt.get_cmap("tab20b") b_colors = cmap(np.array([0, 8, 12])) sm_colors = cmap(np.array([1, 2, 3, 9, 10, 11, 13, 14, 15])) ax.pie(data.sum(axis=1), radius=1, colors=b_colors, wedgeprops=dict(width=offset, edgecolor='w')) ax.pie(data.flatten(), radius=1-offset, colors=sm_colors, wedgeprops=dict(width=offset, edgecolor='w'))
Круговая диаграмма в виде бублика
Построим круговую диаграмму в виде бублика (с отверстием посередине). Это можно сделать через параметр wedgeprops, который отвечает за внешний вид долей:
vals = [24, 17, 53, 21, 35] labels = ["Ford", "Toyota", "BMV", "AUDI", "Jaguar"] fig, ax = plt.subplots() ax.pie(vals, labels=labels, wedgeprops=dict(width=0.5))
P.S.
Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Хорошие уроки, но было бы интереснее, если бы примеры запускались.