25
25
26
26
__revision__ = '$Format:%H$'
27
27
28
- import matplotlib .pyplot as plt
29
- import matplotlib .pylab as lab
30
- import numpy as np
28
+ import plotly as plt
29
+ import plotly .graph_objs as go
31
30
32
31
from processing .core .GeoAlgorithm import GeoAlgorithm
33
32
from processing .core .parameters import ParameterTable
@@ -43,8 +42,7 @@ class MeanAndStdDevPlot(GeoAlgorithm):
43
42
INPUT = 'INPUT'
44
43
OUTPUT = 'OUTPUT'
45
44
NAME_FIELD = 'NAME_FIELD'
46
- MEAN_FIELD = 'MEAN_FIELD'
47
- STDDEV_FIELD = 'STDDEV_FIELD'
45
+ VALUE_FIELD = 'VALUE_FIELD'
48
46
49
47
def defineCharacteristics (self ):
50
48
self .name , self .i18n_name = self .trAlgorithm ('Mean and standard deviation plot' )
@@ -55,33 +53,33 @@ def defineCharacteristics(self):
55
53
self .addParameter (ParameterTableField (self .NAME_FIELD ,
56
54
self .tr ('Category name field' ), self .INPUT ,
57
55
ParameterTableField .DATA_TYPE_ANY ))
58
- self .addParameter (ParameterTableField (self .MEAN_FIELD ,
59
- self .tr ('Mean field' ), self .INPUT ))
60
- self .addParameter (ParameterTableField (self .STDDEV_FIELD ,
61
- self .tr ('StdDev field' ), self .INPUT ))
56
+ self .addParameter (ParameterTableField (self .VALUE_FIELD ,
57
+ self .tr ('Value field' ), self .INPUT ))
62
58
63
59
self .addOutput (OutputHTML (self .OUTPUT , self .tr ('Plot' )))
64
60
65
61
def processAlgorithm (self , feedback ):
66
62
layer = dataobjects .getObjectFromUri (
67
63
self .getParameterValue (self .INPUT ))
68
64
namefieldname = self .getParameterValue (self .NAME_FIELD )
69
- meanfieldname = self .getParameterValue (self .MEAN_FIELD )
70
- stddevfieldname = self .getParameterValue (self .STDDEV_FIELD )
65
+ valuefieldname = self .getParameterValue (self .VALUE_FIELD )
71
66
72
67
output = self .getOutputValue (self .OUTPUT )
73
68
74
- values = vector .values (layer , namefieldname , meanfieldname , stddevfieldname )
75
- plt .close ()
76
- ind = np .arange (len (values [namefieldname ]))
77
- width = 0.8
78
- plt .bar (ind , values [meanfieldname ], width , color = 'r' ,
79
- yerr = values [stddevfieldname ],
80
- error_kw = dict (ecolor = 'yellow' ),
81
- )
82
-
83
- plt .xticks (ind , values [namefieldname ], rotation = 45 )
84
- plotFilename = output + '.png'
85
- lab .savefig (plotFilename )
86
- with open (output , 'w' ) as f :
87
- f .write ('<html><img src="' + plotFilename + '"/></html>' )
69
+ values = vector .values (layer , namefieldname , valuefieldname )
70
+
71
+ d = {}
72
+ for i in range (len (values [namefieldname ])):
73
+ v = values [namefieldname ][i ]
74
+ if v not in d :
75
+ d [v ] = [values [valuefieldname ][i ]]
76
+ else :
77
+ d [v ].append (values [valuefieldname ][i ])
78
+
79
+ data = []
80
+ for k , v in d .items ():
81
+ data .append (go .Box (y = list (v ),
82
+ boxmean = 'sd' ,
83
+ name = k
84
+ ))
85
+ plt .offline .plot (data , filename = output , auto_open = False )
0 commit comments