def _genLegendKeywords(self, axes, handles, labels): legendKeywords = {} if self.columns > 1: if not _check_min_matplotlib_version(0, 98, 0): warnings.warn("Number of columns support not available " "in versions of matplotlib prior to 0.98") else: legendKeywords["ncol"] = self.columns legendKeywords["scatterpoints"] = self.scatterPoints if self.labelSize is not None: legendKeywords["prop"] = {"size" : self.labelSize} if self.bboxToAnchor is not None: legendKeywords["bbox_to_anchor"] = bbox_to_anchor return legendKeywords
def _genLegendKeywords(self): legendKeywords = {} if self.columns > 1: if not _check_min_matplotlib_version(0, 98, 0): warnings.warn("Number of columns support not available " "in versions of matplotlib prior to 0.98") else: legendKeywords["ncol"] = self.columns legendKeywords["scatterpoints"] = self.scatterPoints if self.labelSize is not None: legendKeywords["prop"] = {"size" : self.labelSize} if self.bboxToAnchor is not None: legendKeywords["bbox_to_anchor"] = self.bboxToAnchor if self.title is not None: legendKeywords["title"] = self.title return legendKeywords
def _doPlot(self): if len(self.groupedPlots) + len(self.plots) == 0: raise BoomslangPlotRenderingException("No data to plot!") oldRCParams = {} if self.rcParams is not None: for (param, value) in self.rcParams.items(): oldRCParams[param] = pylab.rcParams[param] pylab.rcParams[param] = value groupedPlotLengths = [len(plots) for plots in self.groupedPlots.values()] if len(groupedPlotLengths) == 0: maxRowLength = self.width else: maxRowLength = max(groupedPlotLengths) numPlots = len(self.plots) if numPlots == 0: numExcessRows = 0 elif numPlots <= maxRowLength: numExcessRows = 1 elif numPlots % maxRowLength == 0: numExcessRows = numPlots / maxRowLength else: numExcessRows = (numPlots / maxRowLength) + 1 numRows = len(self.groupedPlots.keys()) + numExcessRows if self.groupOrder is not None: keyList = self.groupOrder else: keyList = self.groupedPlots.keys() currentRow = 0 if self.figdimensions is not None: fig = pyplot.figure(figsize=(self.figdimensions[0], self.figdimensions[1])) elif self.dimensions is not None: fig = pyplot.figure(figsize=(self.dimensions[0] * maxRowLength, self.dimensions[1] * numRows)) else: (figWidth, figHeight) = getGoldenRatioDimensions(8.0) figWidth *= maxRowLength figHeight *= numRows fig = pyplot.figure(figsize=(figWidth, figHeight)) plotHandles = [] plotLabels = [] for grouping in keyList: currentColumn = 1 plots = self.groupedPlots[grouping] numPlots = len(plots) for plot in plots: myRows = numRows myCols = numPlots myPos = (currentRow * numPlots) + currentColumn (currPlotHandles, currPlotLabels) = self._plot_subplot( plot = plot, fig = fig, rows = myRows, cols = myCols, pos = myPos, projection=plot.projection) for i in xrange(len(currPlotHandles)): if currPlotLabels[i] in plotLabels: continue if isinstance(currPlotHandles[i], list): plotHandles.append(currPlotHandles[i][0]) else: plotHandles.append(currPlotHandles[i]) plotLabels.append(currPlotLabels[i]) currentColumn += 1 currentRow += 1 ungroupedPlotsRemaining = len(self.plots) if ungroupedPlotsRemaining > 0: currentColumn = 1 for plot in self.plots: if currentColumn == 1: numColumns = min(maxRowLength, ungroupedPlotsRemaining) myRows = numRows myCols = numColumns myPos = (currentRow * numColumns) + currentColumn (currPlotHandles, currPlotLabels) = self._plot_subplot( plot = plot, fig = fig, rows = myRows, cols = myCols, pos = myPos, projection=plot.projection) for i in xrange(len(currPlotHandles)): if currPlotLabels[i] in plotLabels: continue if isinstance(currPlotHandles[i], list): plotHandles.append(currPlotHandles[i][0]) else: plotHandles.append(currPlotHandles[i]) plotLabels.append(currPlotLabels[i]) currentColumn += 1 if currentColumn > numColumns: currentRow += 1 currentColumn = 1 ungroupedPlotsRemaining -= 1 if self.figLegendLoc is not None: figLegendKeywords = {} if self.figLegendCols is not None: if not _check_min_matplotlib_version(0, 98, 0): warnings.warn("Number of columns support not available in " "versions of matplotlib prior to 0.98") else: figLegendKeywords["ncol"] = self.figLegendCols fig.legend(plotHandles, plotLabels, self.figLegendLoc, **figLegendKeywords) if self.plotParams is not None: fig.subplots_adjust(left=self.plotParams["left"], bottom=self.plotParams["bottom"], right=self.plotParams["right"], top=self.plotParams["top"], wspace=self.plotParams["wspace"], hspace=self.plotParams["hspace"]) # Restore old RC params for (key,value) in oldRCParams.items(): pylab.rcParams[key] = value if _check_min_matplotlib_version(1, 1, 0): fig.tight_layout() return fig
def _doPlot(self): if len(self.groupedPlots) + len(self.plots) == 0: raise BoomslangPlotRenderingException("No data to plot!") oldRCParams = {} if self.rcParams is not None: for (param, value) in self.rcParams.items(): oldRCParams[param] = pylab.rcParams[param] pylab.rcParams[param] = value groupedPlotLengths = [ len(plots) for plots in self.groupedPlots.values() ] if len(groupedPlotLengths) == 0: maxRowLength = self.width else: maxRowLength = max(groupedPlotLengths) numPlots = len(self.plots) if numPlots == 0: numExcessRows = 0 elif numPlots <= maxRowLength: numExcessRows = 1 elif numPlots % maxRowLength == 0: numExcessRows = numPlots / maxRowLength else: numExcessRows = (numPlots / maxRowLength) + 1 numRows = len(self.groupedPlots.keys()) + numExcessRows if self.groupOrder is not None: keyList = self.groupOrder else: keyList = self.groupedPlots.keys() currentRow = 0 if self.figdimensions is not None: fig = pyplot.figure(figsize=(self.figdimensions[0], self.figdimensions[1])) elif self.dimensions is not None: fig = pyplot.figure(figsize=(self.dimensions[0] * maxRowLength, self.dimensions[1] * numRows)) else: (figWidth, figHeight) = getGoldenRatioDimensions(8.0) figWidth *= maxRowLength figHeight *= numRows fig = pyplot.figure(figsize=(figWidth, figHeight)) plotHandles = [] plotLabels = [] for grouping in keyList: currentColumn = 1 plots = self.groupedPlots[grouping] numPlots = len(plots) for plot in plots: myRows = numRows myCols = numPlots myPos = (currentRow * numPlots) + currentColumn (currPlotHandles, currPlotLabels) = self._plot_subplot( plot=plot, fig=fig, rows=myRows, cols=myCols, pos=myPos, projection=plot.projection) for i in xrange(len(currPlotHandles)): if currPlotLabels[i] in plotLabels: continue if isinstance(currPlotHandles[i], list): plotHandles.append(currPlotHandles[i][0]) else: plotHandles.append(currPlotHandles[i]) plotLabels.append(currPlotLabels[i]) currentColumn += 1 currentRow += 1 ungroupedPlotsRemaining = len(self.plots) if ungroupedPlotsRemaining > 0: currentColumn = 1 for plot in self.plots: if currentColumn == 1: numColumns = min(maxRowLength, ungroupedPlotsRemaining) myRows = numRows myCols = numColumns myPos = (currentRow * numColumns) + currentColumn (currPlotHandles, currPlotLabels) = self._plot_subplot( plot=plot, fig=fig, rows=myRows, cols=myCols, pos=myPos, projection=plot.projection) for i in xrange(len(currPlotHandles)): if currPlotLabels[i] in plotLabels: continue if isinstance(currPlotHandles[i], list): plotHandles.append(currPlotHandles[i][0]) else: plotHandles.append(currPlotHandles[i]) plotLabels.append(currPlotLabels[i]) currentColumn += 1 if currentColumn > numColumns: currentRow += 1 currentColumn = 1 ungroupedPlotsRemaining -= 1 if self.figLegendLoc is not None: figLegendKeywords = {} if self.figLegendCols is not None: if not _check_min_matplotlib_version(0, 98, 0): warnings.warn("Number of columns support not available in " "versions of matplotlib prior to 0.98") else: figLegendKeywords["ncol"] = self.figLegendCols fig.legend(plotHandles, plotLabels, self.figLegendLoc, **figLegendKeywords) if self.plotParams is not None: fig.subplots_adjust(left=self.plotParams["left"], bottom=self.plotParams["bottom"], right=self.plotParams["right"], top=self.plotParams["top"], wspace=self.plotParams["wspace"], hspace=self.plotParams["hspace"]) # Restore old RC params for (key, value) in oldRCParams.items(): pylab.rcParams[key] = value if _check_min_matplotlib_version(1, 1, 0) and self.tight: fig.tight_layout() return fig