问题描述
我应该在python中准备一个x vs y图。我的数据集包含“日期-时间和温度”,它们以一年15分钟的间隔记录。假设我有一个月的数据,并尝试在Matplotlib中进行绘制。我得到的图不太清楚,因为x轴(数据时间)在整个轴上都充满了,而且我没有得到清晰的图像,而Excel与matplotlib相比,绘图效果很好。
我用来打开30个日常csv数据记录文件并将其连接起来以形成一个数据帧的代码如下
require("./myserver");
数据示例
输出图如下:
正如您在输出图中所看到的,x轴上的数据点是繁荣的,并且不是可读形式。此外,如果我将.csv文件加载和连接几天,则matplotlib会给出多个图形。
在Excel / Libre中绘制的相同数据集提供了一个平滑的图形,其x轴上的日期安排得井井有条,线形图也很完美。
我想重写代码以绘制类似于Excel / Libre中绘制的图形。请帮忙
解决方法
尝试这种方法:
使用date locators格式化具有所需日期范围的x轴。 日期定位器可用于定义间隔,以秒,分钟,...:
- SecondLocator:定位秒数
- MinuteLocator:查找分钟数
- HourLocator:查找时间
- DayLocator:查找每月的指定日期
- MonthLocator:查找月份
- YearLocator:定位年份
在示例中,我使用MinuteLocator
,间隔为15分钟。
将matplotlib.dates
导入绘图中的工作日期:
import matplotlib.dates as mdates
import pandas as pd
import matplotlib.pyplot as plt
获取数据
# Sample data
# Data
df = pd.DataFrame({
'Date': ['07/14/2020','07/14/2020','07/14/2020'],'Time': ['12:15:00 AM','12:30:00 AM','12:45:00 AM','01:00:00 AM'],'Temperature': [22.5,22.5,23.0]
})
将Time period
从字符串转换为日期对象:
# Convert data to Date and Time
df["Time period"] = pd.to_datetime(df['Date'] + ' ' + df['Time'])
定义min
和max
的时间间隔:
min = min(df['Time period'])
max = max(df['Time period'])
创建情节:
# Plot
# Create figure and plot space
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot()
使用定位符设置时间间隔:
# Set Time Interval
ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=15))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
设置绘图选项和绘图:
# Set labels
ax.set(xlabel="Time",ylabel="Temperature",title="Temperature distribution Graph",xlim=[min,max])
# Plot chart
ax.plot('Time period','Temperature',data=df,linewidth=2,color='g')
ax.grid(True)
fig.autofmt_xdate()
plt.show()