def testConvertNulls(self): self.assertEqual(vector.convert_nulls([]), []) self.assertEqual(vector.convert_nulls([], '_'), []) self.assertEqual(vector.convert_nulls([NULL]), [None]) self.assertEqual(vector.convert_nulls([NULL], '_'), ['_']) self.assertEqual(vector.convert_nulls([NULL], -1), [-1]) self.assertEqual(vector.convert_nulls([1, 2, 3]), [1, 2, 3]) self.assertEqual(vector.convert_nulls([1, None, 3]), [1, None, 3]) self.assertEqual(vector.convert_nulls([1, NULL, 3, NULL]), [1, None, 3, None]) self.assertEqual(vector.convert_nulls([1, NULL, 3, NULL], '_'), [1, '_', 3, '_'])
def processAlgorithm(self, parameters, context, feedback): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) namefieldname = self.parameterAsString(parameters, self.NAME_FIELD, context) valuefieldname = self.parameterAsString(parameters, self.VALUE_FIELD, context) output = self.parameterAsFileOutput(parameters, self.OUTPUT, context) values = vector.values(source, valuefieldname) x_index = source.fields().lookupField(namefieldname) x_var = vector.convert_nulls([i[namefieldname] for i in source.getFeatures(QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry).setSubsetOfAttributes([x_index]))], '<NULL>') msdIndex = self.parameterAsEnum(parameters, self.MSD, context) msd = True if msdIndex == 1: msd = 'sd' elif msdIndex == 2: msd = False data = [go.Box( x=x_var, y=values[valuefieldname], boxmean=msd)] plt.offline.plot(data, filename=output, auto_open=False) return {self.OUTPUT: output}
def processAlgorithm(self, parameters, context, feedback): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT)) namefieldname = self.parameterAsString(parameters, self.NAME_FIELD, context) valuefieldname = self.parameterAsString(parameters, self.VALUE_FIELD, context) output = self.parameterAsFileOutput(parameters, self.OUTPUT, context) values = vector.values(source, valuefieldname) x_index = source.fields().lookupField(namefieldname) x_var = vector.convert_nulls([ i[namefieldname] for i in source.getFeatures(QgsFeatureRequest().setFlags( QgsFeatureRequest.NoGeometry).setSubsetOfAttributes([x_index])) ], '<NULL>') msdIndex = self.parameterAsEnum(parameters, self.MSD, context) msd = True if msdIndex == 1: msd = 'sd' elif msdIndex == 2: msd = False data = [go.Box(x=x_var, y=values[valuefieldname], boxmean=msd)] plt.offline.plot(data, filename=output, auto_open=False) return {self.OUTPUT: output}
def processAlgorithm(self, parameters, context, feedback): try: # importing plotly throws Python warnings from within the library - filter these out with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=ResourceWarning) warnings.filterwarnings("ignore", category=ImportWarning) import plotly as plt import plotly.graph_objs as go except ImportError: raise QgsProcessingException( QCoreApplication.translate( 'BoxPlot', 'This algorithm requires the Python “plotly” library. Please install this library and try again.' )) source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException( self.invalidSourceError(parameters, self.INPUT)) namefieldname = self.parameterAsString(parameters, self.NAME_FIELD, context) valuefieldname = self.parameterAsString(parameters, self.VALUE_FIELD, context) output = self.parameterAsFileOutput(parameters, self.OUTPUT, context) values = vector.values(source, valuefieldname) x_index = source.fields().lookupField(namefieldname) x_var = vector.convert_nulls([ i[namefieldname] for i in source.getFeatures(QgsFeatureRequest().setFlags( QgsFeatureRequest.NoGeometry).setSubsetOfAttributes([x_index])) ], '<NULL>') msdIndex = self.parameterAsEnum(parameters, self.MSD, context) msd = True if msdIndex == 1: msd = 'sd' elif msdIndex == 2: msd = False data = [go.Box(x=x_var, y=values[valuefieldname], boxmean=msd)] plt.offline.plot(data, filename=output, auto_open=False) return {self.OUTPUT: output}
def processAlgorithm(self, parameters, context, feedback): source = self.parameterAsSource(parameters, self.INPUT, context) if source is None: raise QgsProcessingException(self.invalidSourceError(parameters, self.INPUT)) namefieldname = self.parameterAsString(parameters, self.NAME_FIELD, context) valuefieldname = self.parameterAsString(parameters, self.VALUE_FIELD, context) output = self.parameterAsFileOutput(parameters, self.OUTPUT, context) values = vector.values(source, valuefieldname) x_var = vector.convert_nulls([i[namefieldname] for i in source.getFeatures(QgsFeatureRequest().setFlags(QgsFeatureRequest.NoGeometry))], '<NULL>') data = [go.Bar(x=x_var, y=values[valuefieldname])] plt.offline.plot(data, filename=output, auto_open=False) return {self.OUTPUT: output}