在 Matplotlib 中绘制日期
时间序列图使用自回归综合移动平均值等统计方法传达属性值如何随时间变化。
我们可以根据其产品先前销售的历史时间序列数据可靠地预测或预测特定零售产品的需求。
本文将演示如何使用 matplotlib.dates
和一些使用内置 Python 模块的日期的基本示例,然后我们将看到一个使用 CSV 文件中的数据在 Matplotlib 中绘制日期的示例。
在 Matplotlib 中使用 matplotlib.dates
绘制日期
我们将在 Matplotlib 中查看时间序列数据并绘制日期。大量数据包含日期信息,因此在创建一些图表时知道如何绘制日期将是一个巨大的帮助。
首先,我们将通过 datetime
模块使用一些日期来完成一些基本示例。所以,我们需要导入一些库。
from matplotlib import pyplot as plot
# A matplotlib date tool
import matplotlib.dates as mpl_dates
from datetime import datetime, timedelta
我们在这里有一个包含七个日期的示例数据列表,我们正在使用 Python 的内置 datetime
模块来创建这些日期。
这是连续 7 天,然后在下面,我们的 y 轴有一个 y1
变量。
# A list of dates for seven dates
dates = [
datetime(2021, 10, 10),
datetime(2021, 10, 11),
datetime(2021, 10, 12),
datetime(2021, 10, 13),
datetime(2021, 10, 14),
datetime(2021, 10, 15),
datetime(2021, 10, 16),
]
# A data list
y1 = [1, 10, 3, 2, 5, 16, 7]
plot_date()
方法有助于绘制日期,因此我们调用此方法并传递一个 dates
参数作为 x 轴,将 y1
参数作为 y 轴。
这个绘图不是默认的,而是由一条线连接的标记,但我们可以使用 linestyle
参数快速修复它。我们希望这个图的线条样式是实心的。
plot.plot_date(dates, y1, linestyle="solid")
要从 Pyplot 中获取当前图形,我们可以使用获取当前图形的 gca()
方法。然后我们可以在该图上运行 autofmt_xdate()
。
我们有不同的方式来格式化我们的图,让它看起来不错;我们可以使用 autofmt_xdate()
来格式化我们图形上的日期。这将旋转我们的日期以更好地适应并更改对齐方式。
plot.gcf().autofmt_xdate()
让我们看看如何更改日期的格式。
假设,我们希望它们以月、日和年开头,而不是如何显示年-月-日。为此,我们必须使用一些日期时间格式。
为此,我们将 matplotlib.dates
导入为 mpl_dates
,并从该导入的模块中使用 DateFormatter
类。现在在这个类中,我们传递我们的格式字符串。
月份的缩写名称是%b
,日期是%d
,年份是%Y
。我们需要将其设置为 x 轴的格式。
就像我们抓取图形来运行 autofmt_xdate()
方法一样,我们需要抓取轴来运行该方法。这与获取当前图形很相似,所以要获取当前轴,我们将调用 gca()
方法来获取当前轴。
现在,我们可以使用 xaxis.set_major_formatter()
格式化 x 轴,并传递存储格式化日期的 date_format
。
date_format = mpl_dates.DateFormatter("%b, %d %Y")
# Get the access of current figure
plot.gca().xaxis.set_major_formatter(date_format)
tight_layout()
方法为我们的绘图添加了填充。
plot.tight_layout()
完整的示例代码:
from matplotlib import pyplot as plot
# A matplotlib date tool
import matplotlib.dates as mpl_dates
from datetime import datetime, timedelta
# A list of dates for seven dates
dates = [
datetime(2021, 10, 10),
datetime(2021, 10, 11),
datetime(2021, 10, 12),
datetime(2021, 10, 13),
datetime(2021, 10, 14),
datetime(2021, 10, 15),
datetime(2021, 10, 16),
]
# A data list
y1 = [1, 10, 3, 2, 5, 16, 7]
plot.plot_date(dates, y1, linestyle="solid")
date_format = mpl_dates.DateFormatter("%b, %d %Y")
# Get the access of current figure
plot.gcf().autofmt_xdate()
# Get the access of current figure
plot.gca().xaxis.set_major_formatter(date_format)
# Make responsive
plot.tight_layout()
plot.show()
输出:
在 Matplotlib 中使用 CSV 文件中的数据绘制日期
本节将提供一个使用 CSV 文件中的数据的示例。CSV 文件中的数据是几周内的比特币价格。
首先,我们需要导入 Pandas。
import pandas as pd
我们读取数据以将其加载为 Pandas 数据框并上传 CSV 文件,因此我们的目录中有 data.sv
文件。我们可以使用 read_csv()
方法上传它,这是一个 CSV 文件阅读器。
data = pd.read_csv("data.csv")
我们必须将 Date
列转换为日期时间,因此我们需要使用 Pandas 的 to_datetime()
方法。然后,我们将所有字符串值替换为转换后的日期时间。
在下面的代码行中,我们使用 sort_values()
方法对数据进行排序并传递 inplace=True
,这将修改已排序列的数据。
每当 price_date
等于数据然后传入 Date
的那个键时,它会将 price_date equal
设置为我们数据中与该日期列等效的所有这些日期。
现在,我们将对 price_close
变量做同样的事情,并将其设置为 Close
以获取那些日子的所有收盘价,因此我们有价格日期,以及从 CSV 文件加载的价格收盘数据。
data["Date"] = pd.to_datetime(data["Date"])
data.sort_values("Date", inplace=True)
price_date = data["Date"]
price_close = data["Close"]
为了绘制它,我们将数据传递给 plot_date()
方法。我们将 price_date
作为 x 值传递,将 price_close
作为 y 值传递。
plot.plot_date(price_date, price_close, linestyle="solid")
完整的示例代码:
from matplotlib import pyplot as plot
# A matplotlib date tool
import matplotlib.dates as mpl_dates
from datetime import datetime, timedelta
import pandas as pd
data = pd.read_csv("data.csv")
data["Date"] = pd.to_datetime(data["Date"])
data.sort_values("Date", inplace=True)
price_date = data["Date"]
price_close = data["Close"]
plot.plot_date(price_date, price_close, linestyle="solid")
date_format = mpl_dates.DateFormatter("%b, %d %Y")
# Get the access of current figure
plot.gcf().autofmt_xdate()
# Get the access of current figure
plot.gca().xaxis.set_major_formatter(date_format)
plot.title("Bitcoin Prices")
plot.xlabel("Date")
plot.ylabel("Closing Price")
# Make responsive
plot.tight_layout()
plot.show()
输出:
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn