Matplotlib 如何在 Python 中使用 Matplotlib 和 pandas 绘制散点图
Matplotlib 是一个用于创建精美图形的 Python 库,支持多种绘图类型,并提供了一些可定制的配置选项,可以使你的绘图变得美观。无论你是想绘制线性图形、条形图、散点图还是饼图,Matplotlib 都能够很好地完成你的需求。
pandas 是一个数据处理库,提供了一种高效的方式来处理、清理、转换和分析结构化数据。它也提供了便捷的绘图工具,把 Matplotlib 的强大功能和 pandas 对数据的支持相结合,可以让数据科学家、分析师和程序员以更直观的方式来探索数据。
本文将介绍如何在 Python 中使用 Matplotlib 和 pandas 绘制散点图,包括如何处理日期时间格式的数据。
阅读更多:Matplotlib 教程
准备数据
假设你有一份记录某个城市每天最高气温和最低气温的数据,包括每天的日期。你想画一个散点图,展示每天的最高气温和最低气温之间的关系,并确定两者之间是否存在任何关系。
我们可以用 pandas 创建一个数据框来储存这些数据,并使用 datetime 模块将日期数据解析为 Python 的 datetime 数据类型:
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
data = [
{'date': '2018-01-01', 'high': 32, 'low': 14},
{'date': '2018-01-02', 'high': 30, 'low': 16},
{'date': '2018-01-03', 'high': 28, 'low': 18},
{'date': '2018-01-04', 'high': 32, 'low': 15},
{'date': '2018-01-05', 'high': 35, 'low': 20},
{'date': '2018-01-06', 'high': 30, 'low': 17},
]
df = pd.DataFrame(data)
df['date'] = df['date'].apply(lambda x: datetime.strptime(x, '%Y-%m-%d'))
首先,我们创建了一个数据列表,其中每个元素是一个包含日期、最高气温和最低气温数据的字典。然后,我们使用 pandas 的 DataFrame() 方法包装这个数据列表,将其转换为数据框结构。我们将日期字符串转换为日期时间类型,并将其作为新列添加到数据框中。
接下来,我们可以检查数据框是否包含正确的数据:
print(df)
输出:
date high low
0 2018-01-01 32 14
1 2018-01-02 30 16
2 2018-01-03 28 18
3 2018-01-04 32 15
4 2018-01-05 35 20
5 2018-01-06 30 17
现在我们有了一个数据框,里面包含了每天的日期、最高气温和最低气温数据。接下来,我们将使用 Matplotlib 和 pandas 来绘制散点图。
绘制散点图
要创建散点图,我们可以使用 Matplotlib 中的 scatter() 函数。scatter() 函数需要两个参数:散点图的 x 和 y 坐标,可以使用 pandas 数据框中的列作为坐标。
plt.scatter(df['low'], df['high'])
plt.show()
这将绘制一个包含所有散点的散点图,其中每个点的 x 坐标为最低气温,y 坐标为最高气温。由于我们不将日期作为横坐标,所以散点图的点是按照数据框中的顺序绘制的,而不是按照日期排序。
虽然这个散点图展示了每天最高气温和最低气温之间的关系,但是它缺乏日期信息,我们无法确定哪一天发生了这些情况。为了更好地理解数据,我们可以将日期用作横坐标。
plt.scatter(df['date'], df['high'])
plt.scatter(df['date'], df['low'])
plt.show()
这样绘制的散点图将日期作为横坐标,最高气温和最低气温分别作为两个不同的散点图。为了区分两种颜色的散点图,我们使用不同的颜色来表示最高气温和最低气温。
这样画出来的图形中,我们可以看到每一天的最高气温和最低气温,可以发现它们之间形成的趋势。但是日期格式不太好看,我们可以再想办法将日期以更简单的方式表示出来。
plt.scatter(df['date'].dt.strftime('%Y-%m-%d'), df['high'])
plt.scatter(df['date'].dt.strftime('%Y-%m-%d'), df['low'])
plt.show()
这里使用了 pandas 中的 dt 属性,将日期时间数据转换为具有格式的字符串。我们使用 strftime() 方法将日期格式化为“年-月-日”的格式,以便更好地可视化。
这个散点图更加易于阅读,日期被简单地以“年-月-日”的形式标记出来,最高气温和最低气温分别以不同的颜色呈现。
总结
本文介绍了如何使用 Matplotlib 和 pandas 绘制散点图,包括如何处理日期时间格式的数据。通过使用 pandas 数据框和 Matplotlib 的 scatter() 函数,我们能够快速地创建散点图并显示数据之间的关系。同时,我们还学习了如何使用 pandas 中的 dt 属性将日期时间数据格式化为“年-月-日”的形式,以便更好地可视化。