Add for plotting textless composite plot
This commit is contained in:
parent
e689e63b7b
commit
17b3b927f6
1 changed files with 32 additions and 26 deletions
58
analyse.py
58
analyse.py
|
@ -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()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue