mirror of
https://github.com/aykhans/AzSuicideDataVisualization.git
synced 2025-04-21 18:23:35 +00:00
63 lines
2.1 KiB
Python
63 lines
2.1 KiB
Python
"""
|
|
Generate charts from gathered data.
|
|
|
|
Requires **matplotlib**.
|
|
"""
|
|
|
|
from pympler.classtracker_stats import Stats
|
|
|
|
try:
|
|
import matplotlib
|
|
matplotlib.use('Agg')
|
|
import matplotlib.pyplot as plt
|
|
|
|
def tracker_timespace(filename: str, stats: Stats) -> None:
|
|
"""
|
|
Create a time-space chart from a ``Stats`` instance.
|
|
"""
|
|
classlist = list(stats.index.keys())
|
|
classlist.sort()
|
|
|
|
for snapshot in stats.snapshots:
|
|
stats.annotate_snapshot(snapshot)
|
|
|
|
timestamps = [fp.timestamp for fp in stats.snapshots]
|
|
offsets = [0] * len(stats.snapshots)
|
|
poly_labels = []
|
|
polys = []
|
|
for clsname in classlist:
|
|
pct = [fp.classes[clsname]['pct'] for fp in stats.snapshots
|
|
if fp.classes and clsname in fp.classes]
|
|
if max(pct) > 3.0:
|
|
sizes = [fp.classes[clsname]['sum'] for fp in stats.snapshots
|
|
if fp.classes and clsname in fp.classes]
|
|
sizes = [float(x) / (1024 * 1024) for x in sizes]
|
|
sizes = [offset + size for offset, size in zip(offsets, sizes)]
|
|
poly = matplotlib.mlab.poly_between(timestamps, offsets, sizes)
|
|
polys.append((poly, {'label': clsname}))
|
|
poly_labels.append(clsname)
|
|
offsets = sizes
|
|
|
|
fig = plt.figure(figsize=(10, 4))
|
|
axis = fig.add_subplot(111)
|
|
|
|
axis.set_title("Snapshot Memory")
|
|
axis.set_xlabel("Execution Time [s]")
|
|
axis.set_ylabel("Virtual Memory [MiB]")
|
|
|
|
totals = [float(x.asizeof_total) / (1024 * 1024)
|
|
for x in stats.snapshots]
|
|
axis.plot(timestamps, totals, 'r--', label='Total')
|
|
tracked = [float(x.tracked_total) / (1024 * 1024)
|
|
for x in stats.snapshots]
|
|
axis.plot(timestamps, tracked, 'b--', label='Tracked total')
|
|
|
|
for (args, kwds) in polys:
|
|
axis.fill(*args, **kwds)
|
|
axis.legend(loc=2) # TODO fill legend
|
|
fig.savefig(filename)
|
|
|
|
except ImportError:
|
|
def tracker_timespace(filename: str, stats: Stats) -> None:
|
|
pass
|