Matplotlibで非常に大きなデータセット(日付、時刻(x軸)と記録された値(y軸)を1年間毎日15分ごとにプロットする方法)
Pythonでx対yのグラフを作成することになっています。私のデータセットは、1年の長さ15分間隔で記録された日付-時刻と温度で構成されています。1か月のデータがあり、Matplotlibでプロットしようとしたとします。x軸(データ時間)が軸全体に塗りつぶされているため、グラフがそれほど明確ではなく、明確な画像が得られませんが、Excelではmatplotlibと比較して優れたプロットが得られます。
30個の毎日のcsvデータ記録ファイルを開き、それを連結して1つのデータフレームを形成するために使用するコードは次のとおりです。
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)
データの例

出力グラフは次のようになります。

Excel / Libreでプロットされた同じデータセットは、x軸に日付が正しく配置された滑らかなグラフを提供し、折れ線グラフも完璧です。

Excel / Libreでプロットされたものと同様のグラフをプロットするようにコードを書き直したいと思います。助けてください
回答
このアプローチを試してください:
日付ロケーターを使用して、必要な日付範囲で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()