Как создавать диаграммы в pandas?¶
In [1]: import pandas as pd
In [2]: import matplotlib.pyplot as plt
- Данные о качестве воздуха
В этом руководстве используются данные о концентрации \(NO_2\) в воздухе, предоставленные openaq и использующие пакет py-openaq. Набор данных
Исходные данныеair_quality_no2.csv
содержит значения \(NO_2\) от измерительных станций FR04014, BETR801 и London Westminster в Париже, Антверпене и Лондоне соответственно.In [3]: air_quality = pd.read_csv("data/air_quality_no2.csv", index_col=0, parse_dates=True) In [4]: air_quality.head() Out[4]: station_antwerp station_paris station_london datetime 2019-05-07 02:00:00 NaN NaN 23.0 2019-05-07 03:00:00 50.5 25.0 19.0 2019-05-07 04:00:00 45.0 27.7 19.0 2019-05-07 05:00:00 NaN 50.4 16.0 2019-05-07 06:00:00 NaN 61.9 NaN
Примечание
В примере использованы параметры
index_col
иparse_dates
функцииread_csv
: вindex_col
определяется первый (0-й) столбец в качестве индекса результирующего DataFrame, вparse_dates
задается преобразование дат в столбце вTimestamp
.
Мне нужна быстрая визуальная проверка данных.
In [5]: air_quality.plot() Out[5]: <AxesSubplot:xlabel='datetime'>
pandas по умолчанию создает один линейный график для каждого из столбцов
DataFrame
с числовыми данными. (Примечание переводчика: если после вводаair_quality.plot()
вы видите<AxesSubplot:xlabel='datetime'>
, но не видите саму диаграмму, попробуйте ввестиplt.show()
)
Я хочу отобразить только столбцы с данными из Парижа.
In [6]: air_quality["station_paris"].plot() Out[6]: <AxesSubplot:xlabel='datetime'>
Чтобы построить диаграмму для конкретного столбца, используйте метод выбора из урока по подмножеству данных в сочетании с методом
plot()
. Методplot()
работает как сSeries
, так и сDataFrame
.
Я хочу визуально сравнить значения \(N0_2\), измеренные в Лондоне и Париже.
In [7]: air_quality.plot.scatter(x="station_london", y="station_paris", alpha=0.5) Out[7]: <AxesSubplot:xlabel='station_london', ylabel='station_paris'>
Помимо линейного графика (line
), предусмотренного по умолчанию при использовании функции plot
, существует ряд альтернатив для построения данных. Давайте воспользуемся стандартным Python, чтобы получить обзор доступных методов построения графика:
In [8]: [
...: method_name
...: for method_name in dir(air_quality.plot)
...: if not method_name.startswith("_")
...: ]
...:
Out[8]:
['area',
'bar',
'barh',
'box',
'density',
'hexbin',
'hist',
'kde',
'line',
'pie',
'scatter']
Примечание
Во многих средах разработки, в том числе в IPython и Jupyter Notebook, используют клавишу TAB, чтобы получить обзор доступных методов, например air_quality.plot
+ TAB.
Одним из вариантов является DataFrame.plot.box()
, который относится к диаграмме размаха (она же "ящик с усами"). Метод box
применим к примерам данных о качестве воздуха:
In [9]: air_quality.plot.box()
Out[9]: <AxesSubplot:>
Для ознакомления с диаграммами, отличными от линейных графиков по умолчанию, см. раздел руководства пользователя о поддерживаемых типах диаграмм.
Я хочу, чтобы для каждого из столбцов была своя субдиаграмма.
In [10]: axs = air_quality.plot.area(figsize=(12, 4), subplots=True)
Отдельные субдиаграммы для каждого из столбцов данных поддерживаются аргументом
subplots
функцииplot
. Встроенные параметры, доступные в каждой из функций диаграмм в pandas, заслуживают отдельного рассмотрения.
Некоторые дополнительные параметры форматирования объясняются в разделе руководства пользователя о форматировании диаграмм.
Я хочу дополнительно настроить, расширить или сохранить полученную диаграмму.
In [11]: fig, axs = plt.subplots(figsize=(12, 4)) In [12]: air_quality.plot.area(ax=axs) Out[12]: <AxesSubplot:xlabel='datetime'> In [13]: axs.set_ylabel("NO$_2$ concentration") Out[13]: Text(0, 0.5, 'NO$_2$ concentration') In [14]: fig.savefig("no2_concentrations.png")
Каждая диаграмма, созданная pandas, является объектом Matplotlib. Поскольку Matplotlib предоставляет множество опций для настройки диаграмм, явная связь между pandas и Matplotlib позволяет использовать всю мощь Matplotlib для диаграмм. Эта стратегия применяется в предыдущем примере следующим образом:
fig, axs = plt.subplots(figsize=(12, 4)) # Create an empty matplotlib Figure and Axes
air_quality.plot.area(ax=axs) # Use pandas to put the area plot on the prepared Figure/Axes
axs.set_ylabel("NO$_2$ concentration") # Do any matplotlib customization you like
fig.savefig("no2_concentrations.png") # Save the Figure/Axes using the existing matplotlib method.
ЗАПОМНИТЕ
Методы
.plot.*
применимы как к Series, так и к DataFrame.По умолчанию каждый из столбцов отображается как отдельный элемент (линейный график, диаграмма размаха и так далее).
Любая диаграмма, созданная pandas, является объектом Matplotlib.
Полный обзор построения диаграмм в pandas представлен в разделе руководства пользователя о визуализации.