def test_overlay_a_lot_of_points_1(self): """Customize a chart with group of points.""" # Load config config = load_config("minimal") # Customization config["limits"]["pressure_kpa"] = 90.5 # Chart creation chart = PsychroChart(config) self.assertEqual(90500.0, chart.pressure) # Plotting chart.plot() # Create a lot of points num_samples = 50000 theta = np.linspace(0, 2 * np.pi, num_samples) r = np.random.rand(num_samples) x, y = 7 * r * np.cos(theta) + 25, 20 * r * np.sin(theta) + 50 points = {"test_series_1": (x, y)} scatter_style = { "s": 5, "alpha": 0.1, "color": "darkorange", "marker": "+", } chart.plot_points_dbt_rh(points, scatter_style=scatter_style) # Save to disk path_png = TEST_BASEDIR / "chart_overlay_test_lot_of_points_1.png" chart.save(path_png)
def test_overlay_a_lot_of_points_2(self): """Customize a chart with two cloud of points.""" # Load config config = load_config("minimal") # Customization config['limits']['pressure_kpa'] = 90.5 # Chart creation chart = PsychroChart(config) self.assertEqual(90.5, chart.p_atm_kpa) # Plotting chart.plot() # Create a lot of points num_samples = 100000 theta = np.linspace(0, 2 * np.pi, num_samples) r = np.random.rand(num_samples) x, y = 7 * r * np.cos(theta) + 25, 20 * r * np.sin(theta) + 50 scatter_style_1 = { 's': 20, 'alpha': .02, 'color': 'darkblue', 'marker': 'o' } scatter_style_2 = { 's': 10, 'alpha': .04, 'color': 'darkorange', 'marker': '+' } x2, y2 = x + 5, y - 20 points = { 'test_original': { 'label': 'Original', 'style': scatter_style_1, 'xy': (x, y) }, 'test_displaced': { 'label': 'Displaced', 'xy': (x2, y2) } } chart.plot_points_dbt_rh(points, scatter_style=scatter_style_2) chart.plot_legend(markerscale=1., fontsize=11, labelspacing=1.3) # Save to disk path_png = os.path.join(basedir, 'chart_overlay_test_lot_of_points.png') chart.save(path_png)
def make_psychrochart(svg_image, altitude, pressure_kpa, points, connectors, arrows): """Create the PsychroChart SVG file and save it to disk.""" from psychrochart.agg import PsychroChart from psychrochart.util import load_config # Load chart style: chart_style = load_config(CHART_STYLE_JSON) if altitude is not None: chart_style['limits']['altitude_m'] = altitude elif pressure_kpa is None: chart_style['limits']['pressure_kpa'] = pressure_kpa # Make chart chart = PsychroChart(chart_style, OVERLAY_ZONES_JSON, logger=_LOGGER) # Append lines t_min, t_opt, t_max = 16, 23, 30 chart.plot_vertical_dry_bulb_temp_line(t_min, { "color": [0.0, 0.125, 0.376], "lw": 2, "ls": ':' }, ' TOO COLD, {:g}°C'.format(t_min), ha='left', loc=0., fontsize=14) chart.plot_vertical_dry_bulb_temp_line(t_opt, { "color": [0.475, 0.612, 0.075], "lw": 2, "ls": ':' }) chart.plot_vertical_dry_bulb_temp_line(t_max, { "color": [1.0, 0.0, 0.247], "lw": 2, "ls": ':' }, 'TOO HOT, {:g}°C '.format(t_max), ha='right', loc=1, reverse=True, fontsize=14) chart.plot_points_dbt_rh(points, connectors) if arrows: chart.plot_arrows_dbt_rh(arrows) chart.plot_legend(frameon=False, fontsize=8, labelspacing=.8, markerscale=.7) chart.save(svg_image, format='svg') return True
def test_overlay_a_lot_of_points_2(self): """Customize a chart with two cloud of points.""" # Load config config = load_config("minimal") # Customization config["limits"]["pressure_kpa"] = 90.5 # Chart creation chart = PsychroChart(config) self.assertEqual(90500.0, chart.pressure) # Plotting chart.plot() # Create a lot of points num_samples = 100000 theta = np.linspace(0, 2 * np.pi, num_samples) r = np.random.rand(num_samples) x, y = 7 * r * np.cos(theta) + 25, 20 * r * np.sin(theta) + 50 scatter_style_1 = { "s": 20, "alpha": 0.02, "color": "darkblue", "marker": "o", } scatter_style_2 = { "s": 10, "alpha": 0.04, "color": "darkorange", "marker": "+", } x2, y2 = x + 5, y - 20 points = { "test_original": { "label": "Original", "style": scatter_style_1, "xy": (x, y), }, "test_displaced": { "label": "Displaced", "xy": (x2, y2) }, } chart.plot_points_dbt_rh(points, scatter_style=scatter_style_2) chart.plot_legend(markerscale=1.0, fontsize=11, labelspacing=1.3) # Save to disk path_png = TEST_BASEDIR / "chart_overlay_test_lot_of_points.png" chart.save(path_png)
def test_custom_psychrochart_2(self): """Customize a chart with some additions from a default style.""" # Load config config = load_config("minimal") # Customization config['limits']['pressure_kpa'] = 90.5 config['figure']['x_label'] = None config['figure']['y_label'] = None config['saturation']['linewidth'] = 3 config['chart_params']['with_constant_dry_temp'] = False config['chart_params']['with_constant_humidity'] = False config['chart_params']['with_constant_wet_temp'] = False config['chart_params']['with_constant_h'] = False # Chart creation chart = PsychroChart(config) self.assertEqual(90.5, chart.p_atm_kpa) # Zones: zones_conf = { "zones": [ { "zone_type": "xy-points", "style": {"linewidth": 2, "linestyle": "--", # "color": [0.831, 0.839, 0.0], "edgecolor": [0.498, 0.624, 0.8], "facecolor": [0.498, 0.624, 1.0, 0.3] }, "points_x": [23, 28, 28, 24, 23], "points_y": [1, 3, 4, 4, 2], "label": "Custom" }, { "zone_type": "not_recognized_type", "label": "Bad zone" } ] } chart.append_zones(zones_conf) # Plotting chart.plot() points = {'exterior': (31.06, 32.9), 'exterior_estimated': (36.7, 25.0), 'interior': (29.42, 52.34)} points_plot = chart.plot_points_dbt_rh(points) print('Points in chart: %s' % points_plot) # Legend chart.plot_legend(markerscale=1., fontsize=11, labelspacing=1.3) # Save to disk path_svg = os.path.join( basedir, 'chart_overlay_test.svg') chart.save(path_svg)
def test_custom_psychrochart_4(self): """Customize a chart with group of points.""" # Load config config = load_config("minimal") # Customization config['limits']['pressure_kpa'] = 90.5 # Chart creation chart = PsychroChart(config) self.assertEqual(90.5, chart.p_atm_kpa) # Plotting chart.plot() points = {'exterior': (31.06, 32.9), 'exterior_estimated': (36.7, 25.0), 'interior': (29.42, 52.34)} convex_groups_bad = [ (['exterior', 'interior'], {}, {} ), ] convex_groups_ok = [ (['exterior', 'exterior_estimated', 'interior'], {}, {} ), ] points_plot = chart.plot_points_dbt_rh( points, convex_groups=convex_groups_bad) print('Points in chart: %s' % points_plot) chart.plot_points_dbt_rh( points, convex_groups=convex_groups_ok) # Legend chart.plot_legend(markerscale=1., fontsize=11, labelspacing=1.3) # Save to disk path_svg = os.path.join( basedir, 'chart_overlay_test_convexhull.svg') chart.save(path_svg)
def test_overlay_a_lot_of_points_1(self): """Customize a chart with group of points.""" # Load config config = load_config("minimal") # Customization config['limits']['pressure_kpa'] = 90.5 # Chart creation chart = PsychroChart(config) self.assertEqual(90.5, chart.p_atm_kpa) # Plotting chart.plot() # Create a lot of points num_samples = 50000 # num_samples = 5000 theta = np.linspace(0, 2 * np.pi, num_samples) r = np.random.rand(num_samples) x, y = 7 * r * np.cos(theta) + 25, 20 * r * np.sin(theta) + 50 points = {'test_series_1': (x, y)} scatter_style = { 's': 5, 'alpha': .1, 'color': 'darkorange', 'marker': '+' } # chart.plot_points_dbt_rh(points) chart.plot_points_dbt_rh(points, scatter_style=scatter_style) # Save to disk path_png = os.path.join(basedir, 'chart_overlay_test_lot_of_points_1.png') chart.save(path_png)
def test_custom_psychrochart_4(self): """Customize a chart with group of points.""" # Load config config = load_config("minimal") # Customization config["limits"]["pressure_kpa"] = 90.5 # Chart creation chart = PsychroChart(config) self.assertEqual(90500.0, chart.pressure) # Plotting chart.plot() points = { "exterior": (31.06, 32.9), "exterior_estimated": (36.7, 25.0), "interior": (29.42, 52.34), } convex_groups_bad = [ (["exterior", "interior"], {}, {}), ] chart.plot_points_dbt_rh(points, convex_groups=convex_groups_bad) convex_groups_ok = [ (["exterior", "exterior_estimated", "interior"], {}, {}), ] chart.plot_points_dbt_rh(points, convex_groups=convex_groups_ok) # Legend chart.plot_legend(markerscale=1.0, fontsize=11, labelspacing=1.3) # Save to disk path_svg = TEST_BASEDIR / "chart_overlay_test_convexhull.svg" chart.save(path_svg)
def _make_chart(): chart = PsychroChart("minimal") # Zones: zones_conf = { "zones": [ { "zone_type": "dbt-rh", "style": {"edgecolor": [1.0, 0.749, 0.0, 0.8], "facecolor": [1.0, 0.749, 0.0, 0.2], "linewidth": 2, "linestyle": "--"}, "points_x": [23, 28], "points_y": [40, 60], "label": "Summer" }, { "zone_type": "dbt-rh", "style": {"edgecolor": [0.498, 0.624, 0.8], "facecolor": [0.498, 0.624, 1.0, 0.2], "linewidth": 2, "linestyle": "--"}, "points_x": [18, 23], "points_y": [35, 55], "label": "Winter" } ] } chart.append_zones(zones_conf) # Plotting chart.plot() # Vertical lines t_min, t_opt, t_max = 16, 23, 30 chart.plot_vertical_dry_bulb_temp_line( t_min, {"color": [0.0, 0.125, 0.376], "lw": 2, "ls": ':'}, ' TOO COLD ({}°C)'.format(t_min), ha='left', loc=0., fontsize=14) chart.plot_vertical_dry_bulb_temp_line( t_opt, {"color": [0.475, 0.612, 0.075], "lw": 2, "ls": ':'}) chart.plot_vertical_dry_bulb_temp_line( t_max, {"color": [1.0, 0.0, 0.247], "lw": 2, "ls": ':'}, 'TOO HOT ({}°C) '.format(t_max), ha='right', loc=1, reverse=True, fontsize=14) points = {'exterior': {'label': 'Exterior', 'style': { 'color': [0.855, 0.004, 0.278, 0.8], 'marker': 'X', 'markersize': 15}, 'xy': (31.06, 32.9)}, 'exterior_estimated': { 'label': 'Estimated (Weather service)', 'style': {'color': [0.573, 0.106, 0.318, 0.5], 'marker': 'x', 'markersize': 10}, 'xy': (36.7, 25.0)}, 'interior': {'label': 'Interior', 'style': { 'color': [0.592, 0.745, 0.051, 0.9], 'marker': 'o', 'markersize': 30}, 'xy': (29.42, 52.34)}} connectors = [{'start': 'exterior', 'end': 'exterior_estimated', 'style': {'color': [0.573, 0.106, 0.318, 0.7], "linewidth": 2, "linestyle": "-."}}, {'start': 'exterior', 'end': 'interior', 'style': {'color': [0.855, 0.145, 0.114, 0.8], "linewidth": 2, "linestyle": ":"}}] points_plot = chart.plot_points_dbt_rh(points, connectors) print('Points in chart: %s' % points_plot) # Legend chart.plot_legend( markerscale=.7, frameon=False, fontsize=10, labelspacing=1.2) # Save to disk path_svg = os.path.join( basedir, 'chart_overlay_style_minimal.svg') chart.save(path_svg)
def _make_chart(): chart = PsychroChart("minimal") # Zones: zones_conf = { "zones": [ { "zone_type": "dbt-rh", "style": { "edgecolor": [1.0, 0.749, 0.0, 0.8], "facecolor": [1.0, 0.749, 0.0, 0.2], "linewidth": 2, "linestyle": "--", }, "points_x": [23, 28], "points_y": [40, 60], "label": "Summer", }, { "zone_type": "dbt-rh", "style": { "edgecolor": [0.498, 0.624, 0.8], "facecolor": [0.498, 0.624, 1.0, 0.2], "linewidth": 2, "linestyle": "--", }, "points_x": [18, 23], "points_y": [35, 55], "label": "Winter", }, ] } chart.append_zones(zones_conf) # Plotting chart.plot() # Vertical lines t_min, t_opt, t_max = 16, 23, 30 chart.plot_vertical_dry_bulb_temp_line( t_min, { "color": [0.0, 0.125, 0.376], "lw": 2, "ls": ":" }, f" TOO COLD ({t_min}°C)", ha="left", loc=0.0, fontsize=14, ) chart.plot_vertical_dry_bulb_temp_line( t_opt, { "color": [0.475, 0.612, 0.075], "lw": 2, "ls": ":" }) chart.plot_vertical_dry_bulb_temp_line( t_max, { "color": [1.0, 0.0, 0.247], "lw": 2, "ls": ":" }, f"TOO HOT ({t_max}°C) ", ha="right", loc=1, reverse=True, fontsize=14, ) points = { "exterior": { "label": "Exterior", "style": { "color": [0.855, 0.004, 0.278, 0.8], "marker": "X", "markersize": 15, }, "xy": (31.06, 32.9), }, "exterior_estimated": { "label": "Estimated (Weather service)", "style": { "color": [0.573, 0.106, 0.318, 0.5], "marker": "x", "markersize": 10, }, "xy": (36.7, 25.0), }, "interior": { "label": "Interior", "style": { "color": [0.592, 0.745, 0.051, 0.9], "marker": "o", "markersize": 30, }, "xy": (29.42, 52.34), }, } connectors = [ { "start": "exterior", "end": "exterior_estimated", "style": { "color": [0.573, 0.106, 0.318, 0.7], "linewidth": 2, "linestyle": "-.", }, }, { "start": "exterior", "end": "interior", "style": { "color": [0.855, 0.145, 0.114, 0.8], "linewidth": 2, "linestyle": ":", }, }, ] chart.plot_points_dbt_rh(points, connectors) # Legend chart.plot_legend(markerscale=0.7, frameon=False, fontsize=10, labelspacing=1.2) # Save to disk path_svg = TEST_BASEDIR / "chart_overlay_style_minimal.svg" chart.save(path_svg)
def test_custom_psychrochart_2(self): """Customize a chart with some additions from a default style.""" # Load config config = load_config("minimal") # Customization config["limits"]["pressure_kpa"] = 90.5 config["figure"]["x_label"] = None config["figure"]["y_label"] = None config["saturation"]["linewidth"] = 3 config["chart_params"]["with_constant_dry_temp"] = False config["chart_params"]["with_constant_humidity"] = False config["chart_params"]["with_constant_wet_temp"] = False config["chart_params"]["with_constant_h"] = False # Chart creation chart = PsychroChart(config) self.assertEqual(90500.0, chart.pressure) # Zones: zones_conf = { "zones": [ { "zone_type": "xy-points", "style": { "linewidth": 2, "linestyle": "--", "edgecolor": [0.498, 0.624, 0.8], "facecolor": [0.498, 0.624, 1.0, 0.3], }, "points_x": [23, 28, 28, 24, 23], "points_y": [1, 3, 4, 4, 2], "label": "Custom", }, { "zone_type": "not_recognized_type", "label": "Bad zone" }, ] } chart.append_zones(zones_conf) # Plotting chart.plot() points = { "exterior": (31.06, 32.9), "exterior_estimated": (36.7, 25.0), "interior": (29.42, 52.34), } convex_groups = [ (["exterior", "exterior_estimated", "interior"], {}, {}), ] chart.plot_points_dbt_rh(points, convex_groups=convex_groups) # Legend chart.plot_legend(markerscale=1.0, fontsize=11, labelspacing=1.3) # Save to disk path_svg = TEST_BASEDIR / "chart_overlay_test.svg" chart.save(path_svg)