Source code for ladybug_display.extension.hourlyplot

"""Method to draw an HourlyPlot as a VisualizationSet."""
from ladybug_geometry.geometry3d import Plane

from ladybug_display.geometry3d import DisplayLineSegment3D, DisplayPolyline3D, \
    DisplayText3D
from ladybug_display.visualization import VisualizationSet, AnalysisGeometry, \
    VisualizationData, ContextGeometry


[docs]def hourly_plot_to_vis_set( hourly_plot, z=0, custom_hours=(0, 3, 6, 9, 12, 15, 18, 21, 24), include_title=True): """Get a Ladybug HourlyPlot represented as a VisualizationSet. Args: hourly_plot: A Ladybug HourlyPlot object. z: A number for the Z-coordinate to be used in translation. (Default: 0). custom_hours: A tuple of integers from 0 to 24 to indicate which hours of the day should appear in the Hour_Axis of the visualization. The default is (0, 3, 6, 9, 12, 15, 18, 21, 24). include_title: Boolean to note whether the title should be included in the output visualization. (Default: True). Returns: A VisualizationSet with the hourly plot represented several ContextGeometries (and an AnalysisGeometry). This includes these objects in the following order. - Hour_Axis -- A ContextGeometry with lines and text for the hour-of-the-day axis of the hourly plot. - Month_Axis -- A ContextGeometry with lines and text for the month-of-the-year axis of the hourly plot. - Title -- A ContextGeometry with text for the title of the hourly plot. This layer will be excluded if include_title is False. - Analysis_Data -- An AnalysisGeometry for the data on the hourly plot. """ # establish the VisualizationSet object data_header = hourly_plot.data_collection.header data_type, unit = data_header.data_type, data_header.unit set_id = 'Hourly_Plot_{}'.format(data_type.name.replace(' ', '_')) vis_set = VisualizationSet(set_id, ()) # get global variables used in other places chart_border = DisplayPolyline3D(hourly_plot.chart_border3d, line_width=2) txt_h = hourly_plot.legend_parameters.text_height font = hourly_plot.legend_parameters.font major_hr = hourly_plot.HOUR_LABELS # add the hour axis dis_hour, dis_hour_text = [], [] h_lines = hourly_plot.custom_hour_lines3d(custom_hours) h_pts = hourly_plot.custom_hour_label_points3d(custom_hours) h_text = hourly_plot.custom_hour_labels(custom_hours) for hr, lin, pt, txt in zip(custom_hours, h_lines, h_pts, h_text): if hr in major_hr: lt, t_sz = 'Continuous', txt_h else: lt, t_sz = 'Dotted', txt_h * 0.8 dis_hour.append(DisplayLineSegment3D(lin, line_width=1, line_type=lt)) d_txt = DisplayText3D(txt, Plane(o=pt), t_sz, None, font, 'Right', 'Middle') dis_hour_text.append(d_txt) hour_axis = ContextGeometry('Hour_Axis', [chart_border] + dis_hour + dis_hour_text) hour_axis.display_name = 'Hour Axis' vis_set.add_geometry(hour_axis) # add the month axis dis_month, dis_month_text = [], [] m_lines = hourly_plot.month_lines3d m_pts = hourly_plot.month_label_points3d m_text = hourly_plot.month_labels for lin in m_lines: dis_month.append(DisplayLineSegment3D(lin, line_width=1)) for pt, txt in zip(m_pts, m_text): d_txt = DisplayText3D(txt, Plane(o=pt), t_sz, None, font, 'Center', 'Top') dis_month_text.append(d_txt) month_axis = ContextGeometry( 'Month_Axis', [chart_border] + dis_month + dis_month_text) month_axis.display_name = 'Month Axis' vis_set.add_geometry(month_axis) if include_title: tit_txt = DisplayText3D( hourly_plot.title_text, hourly_plot.lower_title_location, txt_h, None, font, 'Left', 'Bottom') title = ContextGeometry('Title', [tit_txt]) title.display_name = 'Title' vis_set.add_geometry(title) # add the colored mesh vis_data = VisualizationData( hourly_plot.values, hourly_plot.legend_parameters, data_type, unit) mesh_geo = AnalysisGeometry( 'Analysis_Data', [hourly_plot.colored_mesh3d], [vis_data]) mesh_geo.display_name = data_type.name mesh_geo.display_mode = 'Surface' vis_set.add_geometry(mesh_geo) return vis_set