async def plot_multiple_charts(*args: t.Any, **kwargs: t.Any) -> Figure: # These parameters are pulled from kwargs to avoid confusing function # introspection code in IPython widgets location_names = kwargs.pop("location_names", None) configs = kwargs.pop("configs", None) dimensions = kwargs.pop("dimensions", None) with with_database("postgresql+psycopg2://apd@localhost/apd") as session: loop = asyncio.get_running_loop() coros = [] if configs is None: # If no configs are supplied, use all known configs configs = get_known_configs().values() if dimensions is None: # If no dimensions are supplied, get the square root of the number # of configs and round it to find a number of columns. This will # keep the arrangement approximately square. Find rows by multiplying # out rows. total_configs = len(configs) columns = round(math.sqrt(total_configs)) rows = math.ceil(total_configs / columns) if location_names is None: location_query = session.query(deployment_table.c.id, deployment_table.c.name) location_data = await loop.run_in_executor(None, location_query.all) location_names = dict(location_data) figure = plt.figure(figsize=(10 * columns, 5 * rows), dpi=300) for i, config in enumerate(configs, start=1): plot = figure.add_subplot(columns, rows, i) coros.append( plot_sensor(config, plot, location_names, *args, **kwargs)) await asyncio.gather(*coros) return figure
async def plot(*args, **kwargs): location_names = { UUID('53998a51-60de-48ae-b71a-5c37cd1455f2'): "Loft", UUID('1bc63cda-e223-48bc-93c2-c1f651779d69'): "Living Room", UUID('ea0683de-6772-4678-bfe7-6014f54ffc8e'): "Office", UUID('5aaa901a-7564-41fb-8eba-50cdd6fe9f80'): "Outside", } with with_database("postgresql+psycopg2://apd@localhost/apd") as session: coros = [] figure = plt.figure(figsize = (20, 10), dpi=300) configs = get_known_configs().values() for i, config in enumerate(configs, start=1): plot = figure.add_subplot(2, 2, i) coros.append(plot_sensor(config, plot, location_names, *args, **kwargs)) await asyncio.gather(*coros) return figure
from apd.aggregation.query import with_database, get_data from matplotlib import pyplot as plt async def plot(): points = [ (dp.collected_at, dp.data) async for dp in get_data() if dp.sensor_name=="RelativeHumidity" ] x, y = zip(*points) plt.plot_date(x, y, "o", xdate=True) with with_database("postgresql+psycopg2://apd@localhost/apd") as session: await plot() plt.show()