function make_margins(chart_group, canvas, data_extent, buttons=true) { var margins = { "x": { "left": canvas.x * 0.04, "right": canvas.x * 0.04 }, "y": { "top": canvas.x * 0.04, "bottom": canvas.x * 0.04 }, "title": charts_config.plot_attributes.title.size * 2, // space consumed by title "buttons": charts_config.plot_attributes.buttons.size * 2, // space consumed by buttons "axes": { "x": charts_config.plot_attributes.axes.size * 4, // space consumed by x axes "y": charts_config.plot_attributes.axes.size * 4, // space consumed by y axes "label_space": 10 // space between axis label and axis, included in axes.x / axes.y respectively } } // Update axes margins based off space used by their rendered SVG elements axes_margins = calculate_space_needed_by_axes(chart_group, data_extent, margins) margins.axes.x = axes_margins.x margins.axes.y = axes_margins.y if (!buttons) {margins.buttons = 0} return margins } function calculate_maximum_drawing_space(canvas, margins) { var maximum_drawing_space = { "x": canvas.x - margins.x.left - margins.x.right - margins.axes.y, "y": canvas.y - margins.y.top - margins.y.bottom - margins.axes.x - margins.title - margins.buttons }; return maximum_drawing_space } function extract_canvas_from_svg(svg) { var width = svg.attr("width") var height = svg.attr("height") var canvas = { "x": parseNumber(width), "y": parseNumber(height) } return canvas }