来源:Pandas官网:https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html
import pandas as pd
import matplotlib.pyplot as plt
【空气质量数据】
空气质量数据有关使用,由 OpenAQ 提供并使用 py-openaq 包。air_quality_no2.csv N o 2 No_2 No2分别位于巴黎、安特卫普和伦敦的 FR04014、BETR801 和伦敦威斯敏斯特测量站的值。
原始数据:https://github.com/pandas-dev/pandas/tree/main/doc/data/air_quality_no2.csv
air_quality = pd.read_csv("air_quality_no2.csv", index_col=0, parse_dates=True)
air_quality.head()
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 |
read_csv 函数的 index_col 和 parse_dates 参数将第一列(第 0 列)定义为生成的DataFrame的索引,并将列中的日期分别转换为Timestamp时间戳对象。
我想对数据进行快速目视检查。
air_quality.plot()
使用DataFrame,pandas 默认为包含数值数据的每列创建一个线图。
我只想用来自巴黎的数据绘制数据表的列。
air_quality['station_paris'].plot()
要绘制特定列,请将子集数据选择方法与 plot() 方法结合使用。因此,plot() 方法适用于Series和数据DataFrame.
我想直观地比较 N O 2 NO_2 NO2在伦敦与巴黎测量的值。
air_quality.plot.scatter(x='station_london', y='station_paris', alpha=0.5)
除了使用plot函数时的默认线图外,还有许多替代line可用于绘制数据。让我们使用一些标准的 Python 来概述可用的绘图方法:
[
method_name
for method_name in dir(air_quality.plot)
if not method_name.startswith("_")
]
['area',
'bar',
'barh',
'box',
'density',
'hexbin',
'hist',
'kde',
'line',
'pie',
'scatter']
其中一个选项是DataFrame.plot.box()它指的是箱线图。box法适用于空气质量示例数据:
air_quality.plot.box()
我希望每一列都在一个单独的子图中。
axs = air_quality.plot.area(figsize=(12, 4), subplots=True)
plot函数的子图参数支持每个数据列的单独subplots。每个pandas绘图函数中可用的内置选项值得查看。
我想进一步自定义、扩展或保存生成的绘图。
fig, axs = plt.subplots(figsize=(12, 4))
air_quality.plot.area(ax=axs)
axs.set_ylabel("NO$_2$ concentration")
Text(0, 0.5, 'NO$_2$ concentration')
fig.savefig("no2_concentrations.png")
pandas创建的每个绘图对象都是一个 Matplotlib 对象。由于 Matplotlib 提供了大量自定义绘图的选项,因此明确了熊猫和 Matplotlib 之间的链接,使 Matplotlib 能够实现 Matplotlib 对绘图的所有功能。此策略在前面的示例中应用:
.plot.* 方法适用于系列和数据帧。
默认情况下,每列都绘制为不同的元素(线条、箱线图,…)。
pandas创建的任何绘图都是 Matplotlib 对象。