为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Matplotlib 中绘制一个非常大的数据集(日期、时间(x 轴)与记录的值(y 轴)

如何在 Matplotlib 中绘制一个非常大的数据集(日期、时间(x 轴)与记录的值(y 轴)

森栏 2023-06-13 16:49:38
我应该在 python 中准备一个 x vs y 图。我的数据集由日期 - 时间和温度组成,以每年 15 分钟的间隔记录。假设我有一个月的数据,我试图在 Matplotlib 中绘制它。我得到的图表不是那么清楚,因为 x 轴(数据时间)在整个轴上都被填充了,我没有得到清晰的图片,而 Excel 与 matplotlib 相比给出了一个很好的图表。我用来打开 30 个单独的每日 csv 数据记录文件并将其连接起来形成一个数据框的代码如下import pandas as pdfrom openpyxl import load_workbookimport tkinter as tkimport datetimefrom datetime import datetimefrom datetime import timefrom tkinter import filedialogimport matplotlib.pyplot as pltroot = tk.Tk()root.withdraw()root.call('wm', 'attributes', '.', '-topmost', True)files = filedialog.askopenfilename(multiple=True) %gui tkvar = root.tk.splitlist(files)filePaths = []for f in var:    df = pd.read_csv(f,skiprows=8, index_col=None, header=0, parse_dates=True, squeeze=True, encoding='ISO-8859–1', names=['Date', 'Time', 'Temperature', 'Humidty']) #,     filePaths.append(df)    df = pd.concat(filePaths, axis=0, join='outer', ignore_index=False, sort=True, verify_integrity=False, levels=None)     df["Time period"] = df["Date"] + df["Time"]    plt.figure()    plt.subplots(figsize=(25,20))    plt.plot('Time period', 'Temperature', data=df, linewidth=2, color='g')    plt.title('Temperature distribution Graph')    plt.xlabel('Time')    plt.grid(True)数据示例输出图如下所示:正如您在输出图中看到的那样,x 轴上的数据点很丰富,而且它不是可读的形式。此外,如果我在几天内加载和连接 .csv 文件,matplotlib 会给出多个图表。在 Excel/Libre 中绘制的相同数据集给出了一个平滑的图表,x 轴上的日期排列有序,折线图也很完美。我想重写我的代码来绘制一个类似于在 Excel/Libre 中绘制的图形。请帮忙
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

试试这个方法:

使用日期定位器将 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', '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, 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()


查看完整回答
反对 回复 2023-06-13
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信