From 1e8d9d844c3b4d1ae80cfa2626c8a852178074f7 Mon Sep 17 00:00:00 2001 From: Benjamin Loison Date: Fri, 26 Apr 2024 00:52:52 +0200 Subject: [PATCH] Make `plot_dates.py` leverage photo exifs --- datasets/rafael/240424/plot_dates.py | 61 ++++++++++++---------------- 1 file changed, 25 insertions(+), 36 deletions(-) diff --git a/datasets/rafael/240424/plot_dates.py b/datasets/rafael/240424/plot_dates.py index 3e17244..17e3521 100644 --- a/datasets/rafael/240424/plot_dates.py +++ b/datasets/rafael/240424/plot_dates.py @@ -5,46 +5,36 @@ import numpy as np import matplotlib.dates as mdates -try: - # Try to fetch a list of Matplotlib releases and their dates - # from https://api.github.com/repos/matplotlib/matplotlib/releases - import json - import urllib.request +from PIL import Image +from PIL.ExifTags import TAGS - url = 'https://api.github.com/repos/matplotlib/matplotlib/releases' - url += '?per_page=100' - data = json.loads(urllib.request.urlopen(url, timeout=1).read().decode()) +import os - dates = [] - names = [] - for item in data: - if 'rc' not in item['tag_name'] and 'b' not in item['tag_name']: - dates.append(item['published_at'].split("T")[0]) - names.append(item['tag_name']) - # Convert date strings (e.g. 2014-10-18) to datetime - dates = [datetime.strptime(d, "%Y-%m-%d") for d in dates] +os.chdir('photos') -except Exception: - # In case the above fails, e.g. because of missing internet connection - # use the following lists as fallback. - names = ['v2.2.4', 'v3.0.3', 'v3.0.2', 'v3.0.1', 'v3.0.0', 'v2.2.3', - 'v2.2.2', 'v2.2.1', 'v2.2.0', 'v2.1.2', 'v2.1.1', 'v2.1.0', - 'v2.0.2', 'v2.0.1', 'v2.0.0', 'v1.5.3', 'v1.5.2', 'v1.5.1', - 'v1.5.0', 'v1.4.3', 'v1.4.2', 'v1.4.1', 'v1.4.0'] +names = [] +dates = [] - dates = ['2019-02-26', '2019-02-26', '2018-11-10', '2018-11-10', - '2018-09-18', '2018-08-10', '2018-03-17', '2018-03-16', - '2018-03-06', '2018-01-18', '2017-12-10', '2017-10-07', - '2017-05-10', '2017-05-02', '2017-01-17', '2016-09-09', - '2016-07-03', '2016-01-10', '2015-10-29', '2015-02-16', - '2014-10-26', '2014-10-18', '2014-08-26'] +for fileName in sorted(os.listdir()): + #print(fileName) + if fileName.endswith('.JPG'): + image = Image.open(fileName) + imageExif = image.getexif() + dateTimeKey = list(TAGS.keys())[list(TAGS.values()).index('DateTime')] + dateTime = imageExif[dateTimeKey] + #print(dateTime) + names += [fileName.replace('DSC0', '').replace('.JPG', '')] + dates += [dateTime] + #break - # Convert date strings (e.g. 2014-10-18) to datetime - dates = [datetime.strptime(d, "%Y-%m-%d") for d in dates] +# Convert date strings to datetime +dates = [datetime.strptime(d, "%Y:%m:%d %H:%M:%S") for d in dates] # Choose some nice levels -levels = np.tile([-5, 5, -3, 3, -1, 1], - int(np.ceil(len(dates)/6)))[:len(dates)] +NUMBER_OF_LEVELS = 10 +actualLevels = range(-NUMBER_OF_LEVELS * 2 + 1, NUMBER_OF_LEVELS * 2 , 2) +levels = np.tile(actualLevels, + int(np.ceil(len(dates)/len(actualLevels))))[:len(dates)] # Create figure and plot a stem plot with the date fig, ax = plt.subplots(figsize=(8.8, 4), layout="constrained") @@ -62,8 +52,7 @@ for d, l, r in zip(dates, levels, names): verticalalignment="bottom" if l > 0 else "top") # format x-axis with 4-month intervals -ax.xaxis.set_major_locator(mdates.MonthLocator(interval=4)) -ax.xaxis.set_major_formatter(mdates.DateFormatter("%b %Y")) +ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y:%m:%d %H:%M:%S")) plt.setp(ax.get_xticklabels(), rotation=30, ha="right") # remove y-axis and spines @@ -71,4 +60,4 @@ ax.yaxis.set_visible(False) ax.spines[["left", "top", "right"]].set_visible(False) ax.margins(y=0.1) -plt.show() +plt.show() \ No newline at end of file