Как создавать графики в pandas?#

../../_images/04_plot_overview.svg
In [1]: import pandas as pd

In [2]: import matplotlib.pyplot as plt
Данные, используемые в этом руководстве:
  • Для этого руководства, данные о качестве воздуха о \(NO_2\) используется, предоставлен OpenAQ и используя py-openaq пакет. The 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 функцию для определения первого (0-го) столбца как индекса результирующего DataFrame и преобразовать даты в столбце в Timestamp объектов, соответственно.

  • Я хочу быстро визуально проверить данные.

    In [5]: air_quality.plot()
    Out[5]: 
    
    In [6]: plt.show()
    
    ../../_images/04_airqual_quick.png

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

  • Я хочу построить график только для столбцов таблицы данных с данными из Парижа.

    In [7]: air_quality["station_paris"].plot()
    Out[7]: 
    
    In [8]: plt.show()
    
    ../../_images/04_airqual_paris.png

    Чтобы построить график для конкретного столбца, используйте метод выбора учебник по выборке данных в сочетании с plot() метод. Следовательно, plot() метод работает как с Series и DataFrame.

  • Я хочу визуально сравнить \(NO_2\) значения, измеренные в Лондоне по сравнению с Парижем.

    In [9]: air_quality.plot.scatter(x="station_london", y="station_paris", alpha=0.5)
    Out[9]: 
    
    In [10]: plt.show()
    
    ../../_images/04_airqual_scatter.png

Помимо значения по умолчанию line график при использовании plot функция, ряд альтернатив доступен для построения графиков данных. Давайте используем стандартные средства Python, чтобы получить обзор доступных методов построения графиков:

In [11]: [
   ....:     method_name
   ....:     for method_name in dir(air_quality.plot)
   ....:     if not method_name.startswith("_")
   ....: ]
   ....: 
Out[11]: 
['area',
 'bar',
 'barh',
 'box',
 'density',
 'hexbin',
 'hist',
 'kde',
 'line',
 'pie',
 'scatter']

Примечание

Во многих средах разработки, а также в IPython и Jupyter Notebook, используйте кнопку TAB для получения обзора доступных методов, например air_quality.plot. + TAB.

Один из вариантов - DataFrame.plot.box(), что относится к boxplot. box метод применим к примеру данных о качестве воздуха:

In [12]: air_quality.plot.box()
Out[12]: 

In [13]: plt.show()
../../_images/04_airqual_boxplot.png
К руководству пользователя

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

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

    In [14]: axs = air_quality.plot.area(figsize=(12, 4), subplots=True)
    
    In [15]: plt.show()
    
    ../../_images/04_airqual_area_subplot.png

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

К руководству пользователя

Некоторые дополнительные параметры форматирования объясняются в разделе руководства пользователя о форматирование графиков.

  • Я хочу дополнительно настроить, расширить или сохранить полученный график.

    In [16]: fig, axs = plt.subplots(figsize=(12, 4))
    
    In [17]: air_quality.plot.area(ax=axs)
    Out[17]: 
    
    In [18]: axs.set_ylabel("NO$_2$ concentration")
    Out[18]: Text(0, 0.5, 'NO$_2$ concentration')
    
    In [19]: fig.savefig("no2_concentrations.png")
    
    In [20]: plt.show()
    
    ../../_images/04_airqual_customized.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.
plt.show()                                      # Display the plot

ПОМНИТЕ

  • The .plot.* методы применимы как к Series, так и к DataFrames.

  • По умолчанию каждый из столбцов отображается как отдельный элемент (линия, boxplot,…).

  • Любой график, созданный в pandas, является объектом Matplotlib.

К руководству пользователя

Полный обзор построения графиков в pandas представлен в страницы визуализации.