Средства построения графиков для .NET / Хабр
Не так давно пришлось столкнуться с тривиальной задачей — найти решение, которое позволит рендерить рисунки графиков для .NET. Сразу оговорюсь, что меня интересовали только линейные графики. Камнем преткновения, который подтолкнул к переделыванию уже существующего решения (это были графики, встроенные в rdlc отчеты), было быстродействие. В целом, к искомому решению были предъявлены такие требования:
- Необходимо оставить данную оптимизацию незамеченной для конечного пользователя, следовательно, решение должно быть широко настраиваемым, чтобы, в конечном счете, выглядеть так же, как и предшественник.
- Работать быстро (ну понятно, пользователи не любят ждать).
- Желательно, быть бесплатным или с открытым исходным кодом. Покупка не стала бы большой проблемой, найди я отличное платное решение, но начать лучше с open source.
Что было сделано?
Погуглив, выяснилось, что существует достаточно много вариантов для решения данной задачи, и все они достаточно сильно отличаются по многим параметрам (размер сообщества, скорость работы, удобство).
- DisLin. Кроссплатформенная библиотека (UNIX, Linux, FreeBSD, OpenVMS, Windows, Mac OSX и MS-DOS). Чрезвычайно мощная, гибкая, действительно стоит того, чтобы написать отдельную статью только о ней. Может быть, немного уступает своим конкурентам по степени читабельности кода (использует классический функциональный подход), но зато, благодаря этому, может быть легко портирована практически на любой язык. Имеет ванильные
тортыпорты на C, C++, Fortran 77, Fortran 90, Perl, Python, Ruby, Tgl, GCL (порт на C# — обычная библиотека с импортированными функциями). Бесплатная для некоммерческого использования. - Google Chart Sharp. Обертка над Google Chart API для С#. На хабре уже были статьи о нем, поэтому в двух словах: бесплатный (с ограничением 50000 тыс. вызовов в день), работает очень шустро, присутствуют основные параметры для кастомизации. Среди плюсов: возможность использовать везде, где есть подключение к интернету, независимость от используемого языка / ОС. Основной минус — это, естественно, дополнительный round-trip данных по сети (если график Вам нужен ещё на сервере), что замедляет процесс.
- Microsoft Chart Controls. Нативный функционал от Microsoft, который был представлен общественности в далеком 2008 году. К тому времени уже существовал ряд решений от сторонних разработчиков, но это не помешало Ms Chart Controls быстро завоевать популярность среди разработчиков. И не удивительно, ведь они поставлялись с .NET framework, имели удачную архитектуру, были легко настраиваемыми и привлекательными на вид. По скорости уступают остальным, но, тем не менее, работают тоже вполне прилично.
- NPlot. Ещё одна open source библиотека. Правда, не самая быстрая и популярная — информацию по ней можно найти в Интернете, хотя и не так много, как, например, по Microsoft Chart Controls. Тем не менее, поигравшись с ней, у меня осталось довольно приятное послевкусие.
- OxyPlot. «Живой» кроссплатформенный open source, где можно даже зарепортить баг, на который, скорее всего, отреагируют. Доступен также в NuGet. Есть соответствующие контролы для WPF/Silverligth, WinForms, Metro. Плюшки, вроде экспорта напрямую в OpenXml и Pdf. Если Вам необходимо не «минутное» решение и возможность поправить его под себя, это решение для Вас.
- ZedGraph. Также «живой» open source, прямой конкурент для OxyPlot. По количеству поддерживаемых платформ (только Windows) и технологий (только WinForms и ASP .NET) уступает ему, но очень симпатичный и один из самых быстрых. Отличный выбор, если Вам надо «просто красивый график» и больше ничего.
- WebChart. Бесплатный предшественник Microsoft Chart Controls. Насколько я вижу, мертвый с 2004 года. У него чуть более убогий функционал в сравнении с остальными решениями, но, так как он имеет некоторые внешние отличия от остальных, может быть вполне полезен.
- OpenMinded. Беплатный вариант от пользователя OpenMinded. Выглядит красиво. О производительности судить трудно, так как я не нашел возможности рендерить результирующий рисунок иначе как на жесткий диск. Но поскольку проэкт открытый, любой желающий может его доделать под себя, уверен — это не проблема.
Ещё в самом начале я решил, что надо собрать как можно больше вариантов в одном месте и протестить их на быстродействие, а уже после этого было очень жалко выбрасывать в корзину проделанную работу. Поэтому было решено оформить эту статейку и выложить то, что получилось, на GitHub. Таким образом, если возникла необходимость, Вы можете настроить каждое решение под себя и сразу же его проверить. Лично мне очень не хватало такой статьи в начале. Может быть, исходники вызовут улыбку у гуру, но новичкам, которые только вникают в .NET и ASP, они однозначно будут очень полезны.
На моем ПК (Intel Core I5 3.10 GHz, 8gb ОЗУ, Windows 7 x64) вышло следующее распределение скорости работы:
№ |
Решение |
Количество итераций |
Суммарное время (сек) |
Среднее время на одну итерацию (сек) |
1 |
Dislin charts |
5 |
1.9071907 |
0.38143814 |
2 |
Zed Graph |
5 |
2.750275 |
0.550055 |
3 |
NPlot |
5 |
3.1833183 |
0.63666366 |
4 |
Web Chart Control |
5 |
5.130513 |
1.0261026 |
5 |
Microsoft Chart Controls |
5 |
6. 8456845 |
1.3691369 |
6 |
Oxy Plot |
5 |
7.0067006 |
1.40134012 |
7 |
Open minded plot |
5 |
8.257 |
1.6514 |
8 |
Google Sharp charting |
5 |
9.8049804 |
1.96099608 |
Для различных входных параметров (разрешение изображения, количество точек на графике, параметры ПК, скорость интернета, фаза Луны и т.д.) результаты немного отличаются, поэтому Вы можете протестировать быстродействие у себя.
Если кто-то знает ещё бесплатные решения для графиков под .NET, которые пропущены в статье, — пишите в комментариях, и я постараюсь их добавить.
upd — (добавил решение от OpenMinded)
upd2 — (включил DevExpress в опрос)
Карта сайта
Карта сайтаЦвет:C C C
Изображения Вкл. Выкл.
Обычная версия сайта
- Телефон доверия: 8 800 200-01-22
Ошибка 404
К сожалению запрашиваемая страница не найдена.
Но вы можете воспользоваться поиском или картой сайта ниже
|
|
Idioms by The Free Dictionary
Plot+with — Idioms by The Free DictionaryСюжет+с — Idioms by The Free Dictionary
Слово, не найденное в Словаре и Энциклопедии.
Возможно, Вы имели в виду:
Пожалуйста, попробуйте слова отдельно:
участок с
Некоторые статьи, соответствующие вашему запросу:
- график
- график повторения
- график Найквиста
- Участок Q-Q
- Кладбище Кенсико
- Тернарный участок
- Диаграмма Боде
- Контрплот
- Точечный график (статистика)
- Цивилизация (карточная игра)
- Список графических методов
- Роберт Плот
- Генератор сюжетов
- 2007 г. Сюжет о нападении в Международном аэропорту имени Джона Ф. Кеннеди
- Коробчатый сюжет
Полный браузер ?
- ▲
- сюжетная линия
- Параметр модели графика
- Сюжет без дзюцу
- земельный участок
- земельный участок
- земельный участок
- земельный участок
- земельный участок
- Сюжет Mortal Kombat
- Участок на улице Сен-Никез
- участок на
- сюжет
- План участка
- План участка
- План участка
- Точка графика
- Сюжетная точка (ролевые игры)
- Коэффициент деления
- Коэффициент деления
- коэффициенты сюжета
- Схема участка
- заговорить что-то на
- что-нибудь придумать
- сюжет утолщается
- сюжет сгущается,
- Поворот сюжета
- сюжет с
- участок с (одним)
- заговор с кем-то
- График без точки
- сюжет+с
- сюжет, какой сюжет?
- сюжетная линия
- Защита от заговоров
- Площадка
- ПЛОТЕЙ
- Сюжетный
- Платен
- Плотик
- Плотин
- Плотин
- Плотиниан
- Плотник
- Плотинос
- Плотинос
- Плотин
- Плотин
- Плотин
- Плоткин в переплете
- бессюжетный
- бессюжетный
- бессюжетный
- бессюжетный
- бессюжетность
- бессюжетность
- бессюжетность
- бессюжетность
- сюжетная линия
- сюжетная линия
- Плотников Кирилл
- Плотников Кирилл Никанорович
- ▼
Сайт: Следовать:
Делиться:
Открыть / Закрыть
Введение в построение графиков с помощью Matplotlib — Data Science for Psychology and Neuroscience — на Python
Посмотрите прохождение этого урока на YouTube
Вопросы
Цели обучения
Создайте график временных рядов, показывающий один набор данных
Создайте точечную диаграмму, показывающую взаимосвязь между двумя наборами данных
Использование методов для построения графиков непосредственно из pandas DataFrames
Настройка основных функций графика, таких как метки осей, заголовки, цвета и стили линий
Matplotlib — это, по сути, основной пакет для построения графиков и визуализации данных в Python. Многие другие пакеты используют Matplotlib для визуализации данных, включая pandas, NumPy и SciPy. Matplotlib — не единственный пакет визуализации в Python. Есть много других, в том числе Seaborn, Altair, ggpy, Bokeh и plot.ly. Некоторые из других на самом деле построены поверх Matplotlib, но просто синтаксис для создания определенных, сложных типов графики относительно того, что требуется в Matplotlib (они называются обертки для Matplotlib). Другие полностью независимы. Несмотря на это, Matplotlib является наиболее широко используемым и гибким пакетом для визуализации данных в Python, поэтому полезно сначала изучить его, а затем развивать свои навыки на его основе.
Matplotlib также является очень зрелым пакетом Python, впервые выпущенным в 2003 году и с тех пор постоянно обновляемым. У него сильное сообщество разработчиков, подробный веб-сайт с обширной документацией и множеством примеров, а также обширная сторонняя документация в виде сообщений в блогах, книг и многого другого, большая часть которой находится в свободном доступе.
История
Первоначальный разработчик Matplotlib, Джон Д. Хантер (1968-2012), был аспирантом нейробиологии, которому нужно было построить данные электрокортикографии (ЭКоГ) (электрические данные, записанные непосредственно с поверхности мозга). Первоначально Хантер разработал Matplotlib для имитации графических возможностей Matlab, но на Python. Matlab — это коммерческий язык программирования и среда, разработанная и широко используемая инженерами и учеными. Хантер столкнулся с ограничениями в Matlab, которые он хотел обойти. Поскольку Matlab является коммерческим продуктом, а не продуктом с открытым исходным кодом, разработка контролируется компанией (Mathworks). Хотя разработчики могут писать довольно обширные и сложные приложения в Matlab, они в конечном итоге ограничены решениями, принятыми его разработчиками. Хантер решил переключить свою работу на использование Python и хотел разработать интерфейс построения графиков, аналогичный тому, что используется в Matlab. Действительно, отсюда и взялась «матовая» часть имени Matplotlib.
Импорт Matplotlib
Ранее мы рассмотрели, как импортировать пакет Python с помощью команды import
. Мы также рассмотрели, как импортировать пакет с псевдонимом, используя синтаксис import [package] as [alias]
Для Matplotlib мы сделаем это снова, но добавим дополнительную деталь: Matplotlib, как и многие пакеты Python, организован в виде ряда «модулей» (по сути, подмножеств функций). Тот, который вы обычно хотите импортировать для печати, называется 9.0244 Пиплот . Поэтому мы используем синтаксис ниже:
импортировать matplotlib.pyplot как plt
импортировать matplotlib.pyplot как plt
Создание графика
Теперь мы можем нарисовать простой линейный график, используя функцию matplotlib.pyplot
plot() , создав два списка точек данных (каждый длиной по 4 элемента), которые представляют прошедшее время и расстояние, пройденное некоторым гипотетическим объектом. :
время = [0, 1, 2, 3] позиция = [0, 100, 200, 300] plt.plot(время, позиция)
время = [0, 1, 2, 3] позиция = [0, 100, 200, 300] plt.plot(время, позиция)
[]
Вы можете видеть выше, что мы использовали псевдоним Matplotlib plt
, за которым следует имя конкретной функции в пакете, plot()
. Это тот же синтаксис, что и при использовании функции pandas, такой как pd.read_csv()
.
Еще стоит отметить, что над сюжетом есть какой-то текст, что-то вроде: [
. Это часть вывода команды plt.plot()
, но обычно это не то, что нам интересно видеть. Мы можем создать график без этого дополнительного вывода, включив команду plt.show()
в конце ячейки. Напомним, что Jupyter показывает только вывод последней команды, генерирующей вывод в ячейке, а plt.show()
показывает график без дополнительного текста. Хорошо иметь привычку ставить plt.plot()
в качестве последней строки кода в любой ячейке Jupyter, в которой вы создаете график.
# так как мы определили время и позицию выше, не нужно переназначать их здесь plt.plot(время, позиция) plt.show()
# так как мы определили время и позицию выше, не нужно переназначать их здесь plt.plot(время, позиция) plt.show()
Маркировка осей
Matplotlib также позволяет нам изменять график разными способами, что может улучшить интерпретируемость графика. Например, всегда рекомендуется помечать оси графика.
В большинстве случаев способ изменения или улучшения графика Matplotlib заключается не в добавлении аргументов к команде .plot()
, а в выполнении дополнительных команд после .plot()
, которые изменяют то, что было создано .plot( )
, завершившись командой plt.show()
для «окончательного раскрытия»:
plt.plot(время, позиция) plt. xlabel('Время (ч)') plt.ylabel('Позиция (км)') plt.show()
plt.plot(время, позиция) plt.xlabel('Время (ч)') plt.ylabel('Позиция (км)') plt.show()
Построение панд DataFrames
pandas интегрирован с Matplotlib, что упрощает создание графиков данных, хранящихся в пандах DataFrames. Методы определены для панд DataFrames, которые генерируют графики с использованием Matplotlib.
Импорт данных в виде pandas DataFrame
Давайте попробуем сначала импортировать панд и загрузить данные Gapminder Oceania ( data/gapminder_gdp_oceania.csv
):
импортировать панд как pd df = pd.read_csv('data/gapminder_gdp_oceania.csv', index_col='страна')
импортировать панд как pd df = pd.read_csv('data/gapminder_gdp_oceania.csv', index_col='страна')
Давайте посмотрим, как выглядит этот DataFrame:
gdpPercap_1952 | gdpPercap_1957 | gdpPercap_1962 | gdpPercap_1967 | gdpPercap_1972 | gdpPercap_1977 | gdpPercap_1982 | gdpPercap_1987 | gdpPercap_1992 | gdpPercap_1997 | gdpPercap_2002 | gdpPercap_2007 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
страна | ||||||||||||
Австралия | 10039. 59564 | 10949.64959 | 12217.22686 | 14526.12465 | 16788.62948 | 18334.19751 | 19477.00928 | 21888.88903 | 23424.76683 | 26997,93657 | 30687.75473 | 34435.36744 |
Новая Зеландия | 10556.57566 | 12247.39532 | 13175.67800 | 14463.91893 | 16046.03728 | 16233.71770 | 17632.41040 | 19007.19129 | 18363.32494 | 21050.41377 | 23189.80135 | 25185.00911 |
В этом наборе данных всего две страны, что упрощает работу.
Построение графика непосредственно из pandas DataFrame
Наша цель — построить график зависимости ВВП определенной страны (или стран) от года. Другими словами, мы хотим построить линию для каждой страны с годом 9.0441 x осиa и GDP по оси y .
Давайте запустим метод pandas .plot()
в нашем DataFrame для создания графика Matplotlib:
дф.участок() plt.show()
дф.участок() plt.show()
У нас есть график, но это не самый интуитивный способ просмотра данных. Что здесь случилось?
Из легенды видно, что Python генерирует строку для каждого года в наборе данных со страной на оси x . Это потому что по умолчанию, Matplotlib будет использовать строки DataFrame в качестве оси x и использовать столбцы для определения групп, определяющих отдельные строки. Но в нашем DataFrame строки (индексы) — это страны.
Мы можем изменить это, транспонируя DataFrame, операцию, которая меняет местами строки и столбцы (строки становятся столбцами и наоборот). Чтобы транспонировать DataFrame, мы используем оператор . T
(обратите внимание, что .T
— это оператор, а не метод, поэтому вам не следует добавлять круглые скобки после 9).0244 Т )
df.T.plot() plt.show()
df.T.plot() plt.show()
Выше вы можете видеть, что pandas + Matplotlib также распознает индекс DataFrame как метки, поэтому автоматически создается легенда с названиями стран.
Еще один важный момент, который следует отметить, это то, что мы применяли .T
«на лету» при создании графика. То есть мы не модифицировали хранящийся в памяти DataFrame df
. Мы только что передали данные из df
через .T
оператор, когда мы генерировали сюжет. Вы можете увидеть, что df
не транспонируется, просмотрев его еще раз:
gdpPercap_1952 | gdpPercap_1957 | gdpPercap_1962 | gdpPercap_1967 | gdpPercap_1972 | gdpPercap_1977 | gdpPercap_1982 | gdpPercap_1987 | gdpPercap_1992 | gdpPercap_1997 | gdpPercap_2002 | gdpPercap_2007 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
страна | ||||||||||||
Австралия | 10039. 59564 | 10949.64959 | 12217.22686 | 14526.12465 | 16788.62948 | 18334.19751 | 19477.00928 | 21888.88903 | 23424.76683 | 26997,93657 | 30687.75473 | 34435.36744 |
Новая Зеландия | 10556.57566 | 12247.39532 | 13175.67800 | 14463.91893 | 16046.03728 | 16233.71770 | 17632.41040 | 19007.19129 | 18363.32494 | 21050.41377 | 23189.80135 | 25185.00911 |
Переименование столбцов
Метки осей размером x на приведенном выше графике плохо читаются, потому что имя каждого столбца содержит не только год, но и предшествующий текст gdpPercap_
, например, gdpPercap_1972
. Было бы неплохо удалить этот начальный текст, чтобы метки столбцов были просто числовыми годами.
К счастью, в pandas есть метод .str.strip()
, который удаляет из строки символы, указанные в аргументе. Этот метод работает со строками, поэтому мы вызываем str
перед .strip()
. Чтобы переименовать столбцы, мы можем полагаться на тот факт, что в pandas DataFrames есть свойство .columns
, которое позволяет нам ссылаться на весь набор меток столбцов.
df.columns = df.columns.str.strip('gdpPercap_') дф
df.columns = df.columns.str.strip('gdpPercap_') дф
1952 | 1957 | 1962 | 1967 | 1972 | 1977 | 1982 | 1987 | 1992 | 1997 | 2002 | 2007 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
страна | ||||||||||||
Австралия | 10039. 59564 | 10949.64959 | 12217.22686 | 14526.12465 | 16788.62948 | 18334.19751 | 19477.00928 | 21888.88903 | 23424.76683 | 26997,93657 | 30687.75473 | 34435.36744 |
Новая Зеландия | 10556.57566 | 12247.39532 | 13175.67800 | 14463.91893 | 16046.03728 | 16233.71770 | 17632.41040 | 19007.19129 | 18363.32494 | 21050.41377 | 23189.80135 | 25185.00911 |
Теперь, если мы снова построим df
, x 9Метки оси 0442 более четкие:
df.T.plot() plt.show()
df.T.plot() plt.show()
Теперь посмотрите на DataFrame, чтобы увидеть результат:
1952 | 1957 | 1962 | 1967 | 1972 | 1977 | 1982 | 1987 | 1992 | 1997 | 2002 | 2007 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
страна | ||||||||||||
Австралия | 10039. 59564 | 10949.64959 | 12217.22686 | 14526.12465 | 16788.62948 | 18334.19751 | 19477.00928 | 21888.88903 | 23424.76683 | 26997,93657 | 30687.75473 | 34435.36744 |
Новая Зеландия | 10556.57566 | 12247.39532 | 13175.67800 | 14463.91893 | 16046.03728 | 16233.71770 | 17632.41040 | 19007.19129 | 18363.32494 | 21050.41377 | 23189.80135 | 25185.00911 |
Настройка внешнего вида графика
Если мы хотим настроить цвета графика с несколькими категориями (линии, столбцы и т. д.), мы можем передать аргумент ключевого слова (kwarg) в метод .plot()
.
Чтобы изменить цвет линий, мы передаем kwarg color=
, за которым следует список названий цветов с количеством элементов списка, равным количеству категорий, которые мы рисуем (в данном случае две):
df.T.plot(color=['красный', 'синий']) plt.show()
df.T.plot(color=['красный', 'синий']) plt.show()
Выбор подмножества DataFrame
Выше мы выбрали только данные из Австралии, используя .loc[]
, и присвоили их gdp_australia
. Но более эффективно, используя метод pandas .plot()
, мы можем связать вместе с селектором .loc[]
и методом .plot()
, чтобы выбрать соответствующие данные «на лету», а не сначала определяя переменную для хранения этих данных.
Например, мы можем построить данные для конкретной страны (Австралия), выбрав ее с помощью метода .loc[]
для выбора индекса Австралия
:
df.loc['Австралия']. plot() plt.show()
df.loc['Австралия'].plot() plt.show()
Мы можем настроить это, используя цвет
и стиль линий
kwargs. Обратите внимание: если мы передаем kwarg только одно значение, мы не используем список:
df.loc['Австралия'].plot(color='y', linestyle='--') plt.show()
df.loc['Австралия'].plot(color='y', linestyle='--') plt.show()
Типы участков
Matplotlib сделает некоторые предположения о том, как построить ваш , на основе типов значений, которые ему заданы. Однако вы можете переопределить эти значения по умолчанию, указав желаемый тип графика. Например, мы можем отобразить те же данные Gapminder в виде баров, используя аргумент ключевого слова kind='bar'
:
df.T.plot(kind='bar') plt.ylabel('ВВП на душу населения') plt.show()
df.T.plot(kind='bar') plt.ylabel('ВВП на душу населения') plt.show()
Следует привыкнуть к тому, что некоторые стили печати могут быть определены как аргументы ключевого слова для . plot()
, как указано выше, другие могут быть сгенерированы с использованием подфункций .plot
, например .plot.scatter()
, как показано ниже. Часто вы можете использовать любой из них, чтобы получить тот же результат. В Python часто бывает так, что одно и то же можно сделать разными способами!
Диаграммы рассеяния
Поскольку Австралия и Новая Зеландия находятся в одном регионе мира и активно торгуют друг с другом, вполне вероятно, что их ВВП коррелируют друг с другом. То есть, поскольку ВВП Австралии растет, мы ожидаем, что ВВП Новой Зеландии будет расти аналогичным образом.
Ниже мы создаем диаграмму рассеяния , чтобы проверить, коррелируют ли ВВП двух стран Океании. Это требует другого типа выбора данных из графиков выше, потому что здесь мы хотим использовать данные из одной строки в качестве x 90 442 и еще одну строку в качестве оси 90 441 y 90 442 – вместо использования строк для групп и столбцов для оси 90 441 x 90 442. К счастью, метод pandas .plot.scatter()
распознает наши имена строк (индексы), поэтому нам просто нужно указать их имена:
df.T.plot.scatter(x='Австралия', y='Новая Зеландия') plt.ylabel('ВВП на душу населения') plt.title('Связь между ВВП Австралии и Новой Зеландии') plt.show()
df.T.plot.scatter(x='Австралия', y='Новая Зеландия') plt.ylabel('ВВП на душу населения') plt.title('Связь между ВВП Австралии и Новой Зеландии') plt.show()
Упражнения
Растущий разрыв в богатстве
Заполните поля ниже, чтобы построить минимальный ВВП на душу населения во времени для всех стран Европы. Измените его снова, чтобы построить график максимального ВВП на душу населения во времени для Европы.
data_europe = pd.read_csv('data/gapminder_gdp_europe.csv', index_col='country') data_europe.___.plot(label='min') # Метод поиска минимального значения data_europe.___.plot(label='max') # Метод поиска максимального значения plt.legend(loc='лучший') plt. xticks (вращение = 90) plt.___() # Показать график
Нажмите кнопку, чтобы открыть решение
data_europe = pd.read_csv('data/gapminder_gdp_europe.csv', index_col='country') data_europe.min().plot(label='min') data_europe.max().plot(label='max') plt.legend(loc='лучший') plt.xticks (поворот = 90) plt.show()
Вы могли заметить, что изменчивость максимума намного выше, чем минимума. Взгляните на максимальный и максимальный индексы:
data_asia = pd.read_csv('data/gapminder_gdp_asia.csv', index_col='страна') data_asia.max().plot() plt.show() печать (data_asia.idxmax()) печать (data_asia.idxmin())
Дополнительные корреляции
Эта короткая программа создает график, показывающий корреляцию между ВВП и ожидаемой продолжительностью жизни на 2007 год, нормируя размер маркера по населению:
data_all = pd.read_csv('data/gapminder_all.csv', index_col='страна') data_all.plot (вид = 'разброс', х='gdpPercap_2007', у = 'lifeExp_2007', s=data_all['pop_2007'] / 1e6 ) plt. show()
Используя онлайн-справку и другие ресурсы, объясните, что означает каждый аргумент plot()
делает.
Сохранение графика в файл
Если вы удовлетворены увиденным сюжетом, вы можете сохранить его в файл, возможно, чтобы включить его в публикацию. В модуле matplotlib.pyplot
есть функция, которая выполняет это: .savefig()
. Вызов этой функции, например. с
plt.savefig('my_figure.png')
сохранит текущую фигуру в файл my_figure.png
. Формат файла будет автоматически определен из расширения имени файла (другие форматы: pdf, ps, eps и svg).
Обратите внимание, что когда мы используем функциональный подход к Matplotlib, функции в plt
ссылаются на глобальную переменную фигуры, и после отображения фигуры на экране (например, с помощью plt.show()
) Matplotlib сделает эта переменная ссылается на новую пустую фигуру. Поэтому убедитесь, что вы вызываете plt.