猿问

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

我应该在 python 中准备一个 x vs y 图。我的数据集由日期 - 时间和温度组成,以每年 15 分钟的间隔记录。假设我有一个月的数据,我试图在 Matplotlib 中绘制它。我得到的图表不是那么清楚,因为 x 轴(数据时间)在整个轴上都被填充了,我没有得到清晰的图片,而 Excel 与 matplotlib 相比给出了一个很好的图表。


我用来打开 30 个单独的每日 csv 数据记录文件并将其连接起来形成一个数据框的代码如下


import pandas as pd

from openpyxl import load_workbook

import tkinter as tk

import datetime

from datetime import datetime

from datetime import time

from tkinter import filedialog

import matplotlib.pyplot as plt

root = tk.Tk()

root.withdraw()

root.call('wm', 'attributes', '.', '-topmost', True)

files = filedialog.askopenfilename(multiple=True) 

%gui tk

var = 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)

数据示例

输出图如下所示:

http://img.mukewang.com/64882dc50001d65d06450351.jpg

正如您在输出图中看到的那样,x 轴上的数据点很丰富,而且它不是可读的形式。此外,如果我在几天内加载和连接 .csv 文件,matplotlib 会给出多个图表。

在 Excel/Libre 中绘制的相同数据集给出了一个平滑的图表,x 轴上的日期排列有序,折线图也很完美。

http://img1.mukewang.com/64882dd30001e7ae06400386.jpg

我想重写我的代码来绘制一个类似于在 Excel/Libre 中绘制的图形。请帮忙



森栏
浏览 179回答 1
1回答

慕田峪9158850

试试这个方法:使用日期定位器将 x 轴格式化为您需要的日期范围。日期定位器可用于定义以秒、分钟……为单位的时间间隔:SecondLocator:定位秒MinuteLocator:定位分钟HourLocator:定位时间DayLocator:定位一个月中的指定日期MonthLocator:定位月份YearLocator:定位年份在示例中,我使用MinuteLocator, 间隔 15 分钟。在绘图中导入matplotlib.dates工作日期:import matplotlib.dates as mdatesimport pandas as pd import matplotlib.pyplot as plt获取您的数据# Sample data# Datadf = 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 Timedf["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 spacefig = plt.figure(figsize=(10, 10))ax = fig.add_subplot()使用定位器设置时间间隔:# Set Time Intervalax.xaxis.set_major_locator(mdates.MinuteLocator(interval=15))ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))设置绘图选项并绘制:# Set labelsax.set(xlabel="Time",       ylabel="Temperature",       title="Temperature distribution Graph", xlim=[min , max])# Plot chartax.plot('Time period', 'Temperature', data=df, linewidth=2, color='g')ax.grid(True)fig.autofmt_xdate()plt.show()
随时随地看视频慕课网APP

相关分类

Python
我要回答