Как сделать подписи на графике python

Добавил пользователь Валентин П.
Обновлено: 05.10.2024

Библиотека matplotlib в Python помогает нам отображать данные на графиках в простейшем виде. Если вы знакомы с построением графиков в MATLAB, то Matplotlib будет легко использовать для базового построения графиков.

Чтобы начать понимать, как Matplotlib помогает нам строить графики и фигуры визуализации для представления данных, нам нужно знать некоторые из основных терминов, которые мы будем часто использовать в этом посте. Давайте сначала изучим эти термины.

Терминология

  • Figure представляет собой законченное окно или страницу, на которой построен график.
  • Axes – это область, на которой отображаются данные. Это может быть ось X, ось Y и т.д.
  • Spines – это линии, которые соединяют точки Axes.

Установка Matplotlib

Библиотеку matplotlib легко установить с помощью pip:

Теперь мы готовы создать несколько примеров, используя эту библиотеку визуализации данных.

Начало работы

В этом разделе мы начнем с построения графика и начнем передавать данные функциям matplotlib в python .

Линейный график

Мы начнем с очень простого примера построения графика. Мы просто будем использовать два списка Python в качестве источника данных для точек графика. Напишем для этого фрагмент кода:

Пример библиотеки matplotlib в python

Диаграмма рассеяния

Вышеупомянутый график показывал точки, которые фактически не были переданы в массиве, поскольку он показывает линию. Что, если мы хотим видеть только фактические точки на графике? Диаграмма разброса достигает этого:

Диаграмма рассеяния в python

Гистограммы

В этом разделе мы познакомим вас с гистограммами. В то время как графики информируют нас о том, как меняются наши данные, гистограмма описывает, как наши данные распределяются. Чем больше значений в диапазоне, тем выше полоса диапазона.

Мы используем функцию hist() для построения гистограммы. У него есть 2 важных параметра:

  • список значений для построения;
  • количество диапазонов для распределения этих точек.

Продемонстрируем это с помощью фрагмента кода:

Гистограммы

Настройка Plot

Если вы заметили первый график Line, мы увидим, что ось Y не начинается с 0. Мы можем изменить это:

Настройка Plot

Рисование нескольких кривых

Совершенно распространено рисование нескольких кривых на одном графике для сравнения. Попробуем вот это:

Рисование нескольких кривых

Изменение цвета и добавление надписи на графике

Как мы видели, кривые выглядят красиво, но разве все они не так похожи? Что, если мы хотим изменить их цвет и показать, что представляет каждый цвет? Попробуем вместе нарисовать синусоидальную и косинусную кривые:

Изменение цвета и добавление надписи на графике

  1. изменен цвет кривых, чтобы упростить сравнение;
  2. добавлена рамка надписи, в которой показано, какой цвет что представляет. Это упрощает чтение метаданных на графике.

Создание гистограммы

Мы можем создавать привлекательные гистограммы с помощью простого фрагмента кода:

Создание гистограммы

Создание круговой диаграммы

Мы можем создавать привлекательные круговые диаграммы с помощью простого фрагмента кода:

Создание круговой диаграммы

Создание тепловых карт

Графики – это круто, но когда дело доходит до визуализации географической информации, нет ничего лучше, чем тепловая карта:

В библиотеке matplotlib для того, чтобы добавить текстовую надпись на график используется очень простая функция text() из модуля matplotlib.pyplot. Коротко рассмотрим её параметры.

    x, y задают координаты выводимого текста. При этом координаты задаются в системе координат осей. То есть координата x=0, y=0 соответствует точке пересечения осей X и Y. Систему координат можно изменять, но об этом я напишу как-нибудь в другой раз.

Простой вывод текста

Для начала выведем рядом с графиком текст с оформлением по умолчанию.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )

В качестве выводимой функции используется sinc(). Чтобы не усложнять пример объявлением этой функции, используется библиотека numpy, где эта функция уже есть. Если вы используете matplotlib, то наверняка знаете об этой библиотеке.

В результате выполнения этого скрипта будет выведено следующее окно:


Задание шрифта. Параметр family

Для того, чтобы поменять шрифт, которым будет выведен текст, используется именованный параметр family (в качестве альтернативы можно использовать параметры fontfamily, fontname или name). Этот параметр может принимать следующие строковые значения: "serif", "sans-serif", "cursive", "fantasy", "monospace" или название шрифта.

Использование параметра family показано в следующем примере.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )

В результате будет показано следующее окно:


Того же самого эффекта можно добиться, используя параметр fontdict:

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )

Если вы не хотите каждый раз при вызове функции text() явно задавать шрифт, его можно задать один раз в общих настройках по умолчанию:

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )

Результат выполнения этого скрипта показан на следующем рисунке:


Также советую посмотреть статью Как изменять настройки по умолчанию, в которой подробно описано, как можно задавать глобальные параметры по умолчанию, чтобы не изменять эти параметры каждый раз в программе.

Изменение размера шрифта. Параметр size

Для изменения размера шрифта используется именованный параметр size. Этот параметр может принимать в качестве значения строки "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large" или число, задающее размер шрифта. Возможные варианты параметра size показаны в следующем примере.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )


Использование наклонного шрифта. Параметр style

Для того, чтобы сделать шрифт наклонным, используется именованный параметр style, который может принимать одно из трех строковых значений: "normal" для использования обычного не наклонного шрифта, "italic" или "oblique". Разницы между последними двумя вариантами я не заметил. Возможно, не для всех шрифтов можно установить разный наклон.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )


Задание толщины шрифта. Параметр weight

Именованный параметр weight, как и параметр size, может принимать либо строковые значения для использования одного из предустановленного размера толщины шрифта, либо целочисленное значение в диапазоне от 0 до 1000. В последнем случае 0 обозначает самый тонкий шрифт, 1000 - самый жирный. Возможные значения параметра weight следующие (в порядке возрастания жирности): "ultralight", "light", "normal", "regular", "book", "medium", "roman", "semibold", "demibold", "demi", "bold", "heavy", "extra bold", "black". Не для каждого шрифта можно установить столько уровней жирности, что видно из следующего примера.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )


Задание цвета шрифта. Параметр color

С помощью именованного параметра color можно задавать цвет, которым будет выведена надпись. Напомню, что цвет в библиотеке matplotlib может задаваться несколькими способами (более подробно о способах задания цвета читайте в статье Способы задания цвета в Matplotlib):

Возможные способы задания цвета демонстрирует следующий пример.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )


Задание цвета фона надписи. Параметр backgroundcolor

Аналогично параметру color работает именованный параметр backgroundcolor, который задает цвет фона надписи, что демонстрирует следующий пример.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )


Задание прозрачности надписи. Параметр alpha

Именованный параметр alpha задает прозрачность надписи. Значение должно лежать в интервале от 0 (полностью прозрачный текст) до 1 (полностью непрозрачный текст).

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )


Поворот текста. Параметр rotation

Для того, чтобы вывести текст, повернутый на определенный угол, используется именованный параметр rotation, который может принимать либо целочисленное значение угла (дробная часть угла отбрасывается), либо одно из возможных строковых значений: "horizontal" для вывода текста горизонтально, "vertical" для вывода текста вертикально.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )


Задание рамки вокруг текста. Параметр bbox

Именованный параметр bbox предназначен для рисования рамки вокруг текста. В качестве значения аргумента bbox должен быть словарь, описывающий отображаемую рамку. В этом словаре ключ обозначает параметр рамки, а значение - значение соответствующего параметра.

Список возможных параметров в документации разбросан по многим страницам, поэтому перечислю здесь те параметры, что удалось найти:

  • Ключ facecolor. Значение, которое задает цвет заливки внутри рамки. Возможное значение - строка, описывающая цвет. Способы задания цвета были перечислены в разделе про параметр color


Следующий пример демонстрирует использование параметра bbox.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )

plt. text ( - 9.5 , 0.6 , '''bbox= "linestyle": "dotted",
"linewidth": 2.0>''' ,
bbox = < "fill" : False ,
"linestyle" : "dotted" ,
"linewidth" : 2.0 > )


Использование класса Text

До сих пор для настройки внешнего вида надписей использовались дополнительные параметры в функции text(), что удобно, если дополнительных параметров не много. Однако, с увеличением количества параметров, которые нужно задать, может оказаться, что нагляднее изменять внешний вид постепенно задавая каждый параметр. Также иногда надо изменять внешний вид уже существующей надписи. Для этого можно использовать классы matplotlib.text.Text и matplotlib.text.TextWithDash.

До сих пор мы не использовали тот факт, что функция text() возвращает экземпляр класса matplotlib.text.Text (если параметр withdash равен False) или matplotlib.text.TextWithDash (если параметр withdash равен True). Однако, получив такой объект, мы можем изменять его параметры, используя методы вида set_*, где вместо звездочки подставляются имена всех тех параметров, которые мы рассмотрели, например, можно использовать методы set_family(), set_bbox() и др. Также можно узнать текущие значения параметров, используя методы вида get_*.

Следующий пример показывает, как можно использовать экземпляры класса matplotlib.text.Text.

import matplotlib. pyplot as plt

import numpy as np


if __name__ == '__main__' :
xvals = np. linspace ( - 10.0 , 10.0 , 300 )
yvals = np. sinc ( xvals )

plt. plot ( xvals , yvals )
plt. xlim ( - 10.0 , 10.0 )
plt. ylim ( - 0.4 , 1.2 )

Результат выглядит следующим образом:


На этом мы закончим рассмотрение функции text(), но скорее всего мы еще будем к ней возвращаться в других примерах из этой серии статей.

Иван 12.12.2012 - 18:10

Ввод текста

Скажите а как можно в matplotlib ввести данные(цифры) которые в программе присвоятся каким то переменным и по которым построится график/гистограмма

Jenyay 12.12.2012 - 20:00

Если я правильно Вас понял, то для этого нужно использовать какую-нибудь библиотеку для построения GUI, например, wxPython.

Как раз в ближайшее время я собираюсь выложить новый пример/статью как интегрировать matplotlib в wxPython. В качестве примера там будет окно для ввода параметров функции Гаусса, которая будет строиться в этом же окне.

Эта статья представляет собой подробное руководство по визуализации данных в Python. Мы расскажем про построение графиков при помощью библиотек Pandas, Seaborn и Plotly, а также наглядно покажем, что счастье именно в деньгах.

Всемирный доклад о счастье пытается ответить на вопрос о том, какие именно факторы влияют на счастье во всем мире.

Структура статьи


Данная статья задумывалась одновременно и как пособие по написанию кода, и как своего рода небольшой справочник, в котором можно время от времени искать нужный тип графика. Для экономии места мы иногда помещали несколько графиков в одну картинку, но вы всегда можете найти наш код либо здесь, либо в соответствующем ему Jupyter ноутбуке.

Оглавление

На каждую секцию мы поставили гиперссылку, так что можете не читать предисловий, а сразу переходить к графикам. Мы не обидимся.

Моя история построения графиков в Python


Более или менее серьезно я начал изучать Python около двух лет назад. Начиная с этого времени, едва ли не каждую неделю я восторгался его простотой и легкостью использования, а также обилием великолепных библиотек с открытым исходным кодом. И чем больше я знакомился с шаблонами и концепциями языка, тем больше все это обретало смысл.

Matplotlib

Но с построением графиков все происходило ровно наоборот. В начале практически каждый мой график, построенный в Matplotlib, напоминал мне какого-то преступника, сбежавшего из 80-х годов. Более того, чтобы построить такую мерзость, мне приходилось проводить целые часы на Stackoverflow. И даже не напоминайте мне про мультидиаграммы. Конечно, результаты выглядят впечатляюще, и ты чувствуешь себя потрясающе, создавая такие вещи программно. Например, строя 50 диаграмм для разных переменных за один раз. Но для этого нужно проделать кучу работы и запомнить множество бесполезных команд.

Seaborn

Знакомство с Seaborn принесло большое облегчение. С помощью этой библиотеки можно несколько абстрагироваться от тонкой настройки. И с точки зрения эстетики получающихся графиков это большой шаг вперед. Но все же Seaborn построена на базе Matplotlib. И зачастую, для нестандартных настроек, приходится переходить к коду Matplotlib.

Bokeh

На короткий момент времени я было подумал, что моим спасением будет Bokeh. Я наткнулся на эту библиотеку, когда работал над геопространственной визуализацией. Но я очень быстро обнаружил, что Bokeh, хоть и отличается от Matplotlib, но построена так же глупо и запутанно.

Plotly

Некоторое время назад, опять-таки работая над визуализацией геопространственных данных, я попробовал plot.ly (далее везде будем называть ее просто plotly). Тогда эта библиотека показалась мне еще более абсурдной, чем все предыдущие. Вам нужно было завести там аккаунт, войти в него на вашем ноутбуке, и только потом plotly начинает строить графики в онлайн режиме. А затем вам нужно еще загрузить эти графики. Я очень быстро отбросил эту библиотеку. Но недавно я наткнулся на YouTube-видео про библиотеки plotly express и plotly 4.0, в котором в том числе говорилось, что они избавились от этой онлайн-чепухи. Я начал играться с этой библиотекой и в результате появилась эта статья. Как говорится, лучше поздно, чем никогда.

Kepler.gl

Не будучи никоим образом библиотекой Python, Kepler.gl, тем не менее, является отличным инструментом для визуализации геопространственных данных. Все что вам нужно, это CSV-файл, который вы легко можете создать при помощи Python.

Мои текущие предпочтения

В конце концов я остановился на библиотеке Pandas для построения графиков на скорую руку, и на Seaborn для презентаций и отчетов (когда визуализация очень важна).

Важность статистических распределений

Я начал изучать статистику (курс Stats 119), учась в Сан-Диего. Этот курс является вводным и включает в себя самые основы статистики, как например, агрегацию данных (визуальную и количественную), концепцию шансов и вероятностей, регрессию, выборки и, самое главное, статистические распределения. В это время мое понимание тех или иных количественных феноменов практически полностью сдвинулось в сторону представления их в виде статистических распределений (как правило, гауссовых).

И по сей день я нахожу потрясающим, как всего две величины, математическое ожидание и дисперсия, могут помочь вам постичь суть явления. Просто зная эти два числа, легко сделать вывод, насколько вероятен тот или иной результат. Мы сразу знаем, в какой области будут основные результаты. Это дает нам возможность быстро выделять статистически значимые явления, не производя при этом сложных вычислений.

В общем, теперь при работе с любыми новыми данными моим первым шагом всегда является попытка визуализировать их статистическое распределение.

Загрузка данных и импорт библиотек

Для начала давайте загрузим данные, которые мы будем использовать в этой статье. Я также произвел предобработку данных (интерполяцию и экстраполяцию — там, где это было уместно).

Загруженный датасет содержит данные в следующих колонках:

Импортирование

Быстро: простые графики в Pandas


Pandas имеет встроенные функции построения графиков, которые можно вызывать непосредственно из Series и DataFrame. За что я обожаю эти функции, это за их краткость, за разумные значения по умолчанию и за то, что с их помощью можно быстро понять, что происходит с данными.

Для создания графика просто вызовите метод .plot(kind= ) следующим образом:

В результате выполнения этой команды получится следующий график:


2018: Гистограмма количества стран в зависимости от ВВП на душу населения. Тут никаких сюрпризов: большинство стран бедны!

При построении графиков в Pandas я использую пять основных параметров:

  • kind: Pandas должна знать, какого типа график вы хотите строить. Возможны следующие варианты: hist, bar, barh, scatter, area, kde, line, box, hexbin, pie .
  • figsize: Позволяет переопределить значение размера, заданное по умолчанию (6 дюймов в ширину и 4 дюйма в высоту). Данный параметр принимает на вход кортеж, например figsize=(12,8) , что я часто использую.
  • title: Добавляет к графику заголовок. Как правило, я его использую, чтобы кратко описать, что происходит на графике, дабы потом это можно было быстро понять. Данный параметр принимает на вход строку.
  • bins: Позволяет переопределить ширину областей гистограммы. Данный параметр принимает на вход список или подобную ему последовательность, например bins=np.arange(2,8,0.25) .
  • xlim/ylim: Позволяет переопределить максимальные и минимальные значения осей x и y . Оба параметра принимают на вход кортежи, например xlim=(0,5) .

Давайте быстро пробежимся по некоторым типам таких графиков.

Вертикальная гистограмма


2018: Список 15 самых счастливых стран в мире. Лидирует Финляндия.

Горизонтальная гистограмма


Средний ВВП на душу населения с разбивкой по континентам. Лидерство Австралии и Новой Зеландии неоспоримо.

Ящик с усами (Box plot)

Точечный график (диаграмма рассеяния)


Диаграмма рассеяния ожидания продолжительности здоровой жизни из Всемирного доклада о счастье (ось х) и ожидания продолжительности жизни из Gapminder (ось у) демонстрирует сильную корреляцию между этими данными (что не удивительно).

Гексбиновая диаграмма


2018: Гексбиновая диаграмма показывает зависимость ожидаемой продолжительности жизни от щедрости.

Круговая диаграмма


2018: Круговая диаграмма показывает количество жителей планеты с разбивкой по континентам.

Диаграмма с накоплением


Количество жителей планеты растет.

Линейный график


Динамика счастья в Германии.

Выводы

Строить графики в библиотеке pandas удобно, просто и быстро. Правда, они выходят слегка корявыми. Но это нормально, так как для создания более эстетичных графиков у нас есть другие инструменты. Переходим к библиотеке seaborn .

Красиво: продвинутые графики в Seaborn


Seaborn использует параметры вывода по умолчанию. Чтобы убедиться, что ваши результаты совпадают с моими, выполните следующий код.

Построение одномерных распределений

Как уже говорилось ранее, я большой фанат статистических распределений. Гистограммы и распределения плотности вероятности являются мощными способами визуализации критических характеристик конкретной переменной. Давайте посмотрим, как мы строим распределения для одной переменной и как строим распределения нескольких переменных в одной диаграмме.


Левый график: гистограмма и ядерная оценка плотности “Life Ladder” для стран Азии в 2018 году. Правый график: ядерная оценка плотности “Life Ladder” для пяти градаций размера ВВП на душу населения. Счастье можно купить за деньги!

Построение двумерных распределений

Всякий раз, когда я хочу визуально исследовать взаимосвязь между двумя и более переменными, это обычно сводится к некоторой форме диаграммы рассеяния и оценке распределений. Существует три варианта концептуально одного и того же графика. В каждом из них график, расположенный в центре, помогает понять совместное распределение частот между двумя переменными. Вдобавок, на правой и верхней границе этого центрального графика изображено предельное одномерное распределение соответствующей переменной (в виде ядерной оценки плотности вероятности или гистограммы).


Совестный график в Seaborn. Точечная диаграмма, двумерная ядерная оценка плотности распределения вероятности и гексабиновая диаграмма в центре, и частные распределения случайных величин справа и сверху.

Точечная диаграмма

Точечная диаграмма — это отличный способ визуализации совместной плотности распределения двух случайных величин. Мы можем добавить третью переменную, выражая ее при помощи оттенка цвета, а также и четвертую, визуализируя ее при помощи размера точки.


Логарифм ВВП на душу населения относительно Life Ladder. Цвет определяет континент, а размер точки — количество населения.

Скрипичный график (Violin plot)

Скрипичный график — это фактически комбинация двух других графиков, ящика с усами (box plot) и графика ядерной оценки плотности вероятности. Он показывает плотность распределения количественной переменной в зависимости от значений категориальной переменной так, чтобы их можно было сравнить между собой.


На данном графике по оси х у нас континенты, а по оси у параметр Life Ladder. В качестве группирующего категориального параметра мы используем ВВП на душу населения, разбитый на пять групп. Отсюда также видно, что чем выше подушевой ВВП, тем выше уровень счастья.

Матричная диаграмма рассеяния

Матричная диаграмма рассеяния представляет собой все возможные попарные диаграммы рассеяния, представленные в виде большой квадратной матрицы. Я обычно нахожу этот вид графика несколько информационно перегруженным, но как бы то ни было, он может помочь найти закономерности.


Матрица рассеяния, построенная при помощи библиотеки Seaborn. Диагональные элементы матрицы являются графиками ядерной оценки плотности распределения вероятности каждой из переменных. А остальные элементы — это диаграммы рассеяния переменных относительно друг друга.

Фасетные сетки (Facet Grid)

Фасетные сетки в Seaborn — это для меня один из основных аргументов в пользу использования данной библиотеки. С ее помощью можно строить мультиграфики на одном дыхании! Рассматривая матричную диаграмму рассеяния, мы уже видели один из примеров фасетной сетки (функция FacetGrid в Seaborn). Данная функция позволяет создавать множество графиков, сегментированных по переменным. Например, в строках матрицы может быть одна переменная (подушевой ВВП, разбитый на пять категорий), а в колонках другая (континенты).

Для написания кода здесь требуется несколько больше кастомизации (а значит — использования Matplotlib), чем мне бы хотелось, но ничего не поделаешь.


По оси х — логарифм параметра Life Ladder, по оси y — годы. Колонки матрицы — это континенты, а строки — различные уровни (всего их 5) подушевого ВВП.

FacetGrid — гистограммы


Гистограммы параметра Life Ladder для всех континентов.

FacetGrid — графики ядерной оценки плотности вероятности с аннотацией

Также возможно добавить в каждый график, находящийся в фасетной сетке, свою специфичную аннотацию. В следующем примере мы добавляем математическое ожидание и дисперсию, а также вертикальную пунктирную линию, проходящую через значение математического ожидания.


Отдельно для каждого континента оценка распределения плотности вероятности параметра Life Ladder. На каждом графике выведено значение математического ожидания и дисперсии.

FacetGrid — температурные карты

Один из моих любимых графиков — это температурные карты, упакованные в фасетные сетки. Этот тип графика очень полезен, когда нужно визуализировать четыре различные переменные в одной картинке. Код выглядит несколько громоздким, но он может быть легко приспособлен под ваши нужды. Также важно заметить, что подобный тип графиков требует сравнительно большого объема данных и хорошей сегментации. Пропуски в данных здесь обрабатываются плохо.


Фасетная тепловая карта, визиализирующая уровень счастья в зависимости от подушевого ВВП, уровня коррупции, времени (годов) и континентов. Мы видим, что счастье увеличивается в правом верхнем углу (то есть, где высокий подушевой ВВП и низкая воспринимаемая коррупция). Влияние времени не определено, но видно, что некоторые континенты (Европа и Северная Америка) заметно счастливей Африки.

Очень красиво: потрясающие интерактивные графики в Plotly


И наконец-то, больше никакой Matplotlib! У библиотеки Plotly есть три важных свойства:

Точечный график (диаграмма рассеяния)

С помощью библиотеки Plotly графики строятся следующим образом. Создаем переменную fig = x.

(PARAMS) , а затем запускаем функцию fig.show() .

Логарифм подушевого ВВП

Точечный график (диаграмма рассеяния) — путешествие во времени

Параллельные категории — прикольный способ визуализировать категоральные переменные

Столбчатые диаграммы — пример интерактивных фильтров

Сюжетный график — как уровень счастья меняется со временем

Выводы и заключение

На сегодня пока все. Из данной статьи вы узнали, как стать настоящим Python-ниндзя в визуализации данных. Еще вы узнали, как можно молучить быстрый результат более эффективно, а также — как создавать очень красивые диаграммы, когда опять надвигается проклятое заседание правления.Кроме того, вы узнали, как создавать интерактивные диаграммы, которые особенно полезны при визуализации геопространственных данных.

Лаборатория Django-разработки

За 3 месяца отработай навыки Django-разработки до профессионального уровня на серьезном проекте под руководством наставника.

Построим график функции y = x 3 +5x 2 +10 и ее производных y' и y" при х от -5 до 2.

x n записывается как x**n

1.jpg

Import

Короткие имена

Если для работы нужен пакет (package, library) numpy (работа с векторами), то его нужно подключить к файлу

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

Нужные import

Интерпретатор или запуск файла

Работа в интерпретаторе

Для работы в IPython или Qtconsole нужно написать в начале (включить построение графиков в тетрадь).

Для построения графиков не в тетради, а в файле в формате png нужно написать

Писать plt.show() или plt.draw() не нужно.

Выполнение программы

В конце кода обязательно должно стоять или plt.show() (показать интерактивный график) или fig.savefig('1.jpg') (сохранить в файле с именем 1.jpg).

Как получить график в repl.it

  • Обязательно сохранять рисунок в файл (например, 1.jpg)
  • в repl.it
    • (1) Перейти в режим проекта, программа находится в файле main.py
    • (2) Run
    • (3) Появится (обновится) панель 1.py, на ней можно увидеть график.


    Полный код программы для repl.it

    Введение в Numpy

    Numpy (numeric python) - библиотека работы с числами.

    В ней задаются наборы точек для построения графиков.

    Задаем набор точек

    Константы и функции numpy

    Термины

    Figure (рисунок), axes (оси)


    fig, ax - это описание рисунка (figure) и осей (axes).

    axis - ось (1), axes - оси (много).

    Axes определяет область, где будем рисовать.

    Figure имеет координаты (0,0) в левом нижнем углу и (1,1) в правом верхнем углу. Оси можно сделать не на весь рисунок, а на часть и добавить подписи.

    figsize=(8, 2.5) определяет размер и масштаб рисунка.

    1a.jpg

    Термины

    Описание линий и маркеров

    Синяя линия шириной 3 пикселя, линия как ---- и точки отмечены треугольниками.





    Legend (описание)



    Axis labels and titles (надписи у осей и заголовки)

    Подключить русские буквы (не-латинские буквы, иероглифы)

    Если вы хотите, чтобы надписи были на русском, а вместо них показываются непонятные символы, то, вероятно, у вас выбран фонт без поддержки нужных букв.

    Можно в каждом вызове set_title и set_xlabel, set_ylabel указывать фонт явно, а можно указать нужный фонт в начале программы.

    Один раз указываем фонт:

    Потом его используем много раз в разных графиках (в функциях оставлены только обязательные параметры).

    Axis range (диапазоны осей)


    Axis ticks, tick labels


    Поставить ticks, подписать около них labels, вариант через plt (а не оси).


    Grid (решетка)


    Логарифмическая шкала

    Для всего рисунка

    Для одного графика (другие графики на рисунке могут иметь обычную шкалу)

    Разные шкалы оси Y для разных графиков (twinx)


    Несколько областей графиков

    По умолчанию создаётся одно графическое окно figure(1) и одна графическая область subplot(111) в этом окне.

    Команда subplot позволяет разбить графическое окно на несколько областей.

    Она имеет три параметра: nrows, ncols, nplot.
    nrows - количество строк;
    ncols - количество столбцов;
    nplot - номер области (от 1 до nrows*ncols).

    Читайте также: