Add for plotting textless composite plot

This commit is contained in:
Dima Gerasimov 2017-11-14 23:01:00 +00:00
parent e689e63b7b
commit 17b3b927f6

View file

@ -4,9 +4,10 @@ from kython import *
from backup_config import SLEEPS_FILE, GRAPHS_DIR, PHASES_FILE from backup_config import SLEEPS_FILE, GRAPHS_DIR, PHASES_FILE
from datetime import datetime, date, time from datetime import datetime, date, time
fromtimestamp = datetime.fromtimestamp fromtimestamp = datetime.fromtimestamp
import os.path
XID = str # TODO how to shared with backup thing? XID = str # TODO how to shared with backup thing?
Phases = Dict[XID, Any] Phases = Dict[XID, Any]
@ -86,23 +87,16 @@ from matplotlib.figure import Figure # type: ignore
from matplotlib.axes import Axes # type: ignore from matplotlib.axes import Axes # type: ignore
from matplotlib.ticker import MultipleLocator, FixedLocator # type: ignore from matplotlib.ticker import MultipleLocator, FixedLocator # type: ignore
def plot_one(sleep: SleepEntry, fig: Figure, axes: Axes, xlims=None): def plot_one(sleep: SleepEntry, fig: Figure, axes: Axes, xlims=None, showtext=True):
span = sleep.completed - sleep.created span = sleep.completed - sleep.created
print(f"span: {span}") print(f"{sleep.xid} span: {span}")
img = imread(sleep.graph) img = imread(sleep.graph)
# all of them are 300x300 images apparently # all of them are 300x300 images apparently
# size = img.shape
# (height, width, depth) = size
# size = (height, width * 5, depth)
# (height, width, depth) = size
# img = imresize(img, size)
# span for image # span for image
xspan = [sleep.created, sleep.completed] xspan = [sleep.created, sleep.completed]
xspan = [mdates.date2num(i) for i in xspan] xspan = [mdates.date2num(i) for i in xspan]
if xlims is None: if xlims is None:
# TODO soo,
tt = sleep.created tt = sleep.created
hour = tt.hour hour = tt.hour
# TODO maybe assert that hour is somewhere between 20 and 8 or something # TODO maybe assert that hour is somewhere between 20 and 8 or something
@ -114,9 +108,10 @@ def plot_one(sleep: SleepEntry, fig: Figure, axes: Axes, xlims=None):
elif hour <= 8: elif hour <= 8:
# went to bed after midnight # went to bed after midnight
start = datetime.combine(tt.date() - timedelta(days=1), starttime) start = datetime.combine(tt.date() - timedelta(days=1), starttime)
pass
else: else:
raise RuntimeError("wtf???") print("wtf??? weird time for sleep...")
# choosing at random
start = datetime.combine(tt.date(), starttime)
end = start + timedelta(hours=10) end = start + timedelta(hours=10)
xlims = [start, end] xlims = [start, end]
@ -124,11 +119,7 @@ def plot_one(sleep: SleepEntry, fig: Figure, axes: Axes, xlims=None):
axes.set_xlim(xlims) axes.set_xlim(xlims)
hhmm_fmt = mdates.DateFormatter('%H:%M') hhmm_fmt = mdates.DateFormatter('%H:%M')
axes.xaxis.set_major_formatter(hhmm_fmt) axes.xaxis.set_major_formatter(hhmm_fmt)
ticks = [ ticks = sleep.phases if showtext else []
# sleep.created,
# sleep.asleep,
# sleep.completed,
] + sleep.phases
axes.xaxis.set_ticks(ticks) axes.xaxis.set_ticks(ticks)
axes.yaxis.set_ticks([]) axes.yaxis.set_ticks([])
axes.tick_params( axes.tick_params(
@ -155,25 +146,40 @@ def plot_one(sleep: SleepEntry, fig: Figure, axes: Axes, xlims=None):
# axes.set_title(str(sleep)) # axes.set_title(str(sleep))
# axes.title.set_size(10) # axes.title.set_size(10)
axes.text(xlims[1] - timedelta(hours=1.5), 20, str(sleep),) if showtext:
axes.text(xlims[1] - timedelta(hours=1.5), 20, str(sleep),)
# plt.text(sleep.asleep(), 0, hhmm(sleep.asleep())) # plt.text(sleep.asleep(), 0, hhmm(sleep.asleep()))
sleeps_count = 30 sleeps = load_sleeps()
sleeps = [s for s in sleeps if os.path.lexists(s.graph)]
sleeps_count = 290 # len(sleeps) # apparently MPL fails at 298 with outofmemory or something
sleeps = sleeps[:sleeps_count]
fig: Figure = plt.figure(figsize=(15, sleeps_count * 1)) fig: Figure = plt.figure(figsize=(15, sleeps_count * 1))
sleeps = load_sleeps() def predicate(sleep: SleepEntry):
sleeps = sleeps[:sleeps_count] """
Filter for comparing similar sleep sesssions
"""
start = sleep.created.time()
end = sleep.completed.time()
if (time(23, 0) <= start <= time(23, 30)) and (time(5, 30) <= end <= time(6, 30)):
return True
return False
# sleeps = lfilter(predicate, sleeps)
axarr = fig.subplots(nrows=len(sleeps)) axarr = fig.subplots(nrows=len(sleeps))
for i, (sleep, axes) in enumerate(zip(sleeps, axarr)): for i, (sleep, axes) in enumerate(zip(sleeps, axarr)):
# axes: Axes = fig.add_subplot(len(sleeps), 1, i + 1) plot_one(sleep, fig, axes, showtext=False)
# ok, have to adjust days a bit...
plot_one(sleep, fig, axes)
# TODO use map?
# pprint(sleeps[:2])
plt.tight_layout() plt.tight_layout()
plt.subplots_adjust(hspace=0.0) plt.subplots_adjust(hspace=0.0)
# er... this saves with a different aspect ratio for some reason.
# tap 'ctrl-s' on mpl plot window to save..
# plt.savefig('res.png', asp)
plt.show() plt.show()