
    ը	f*                         d Z ddlZddlZddlmZ ddlmc mZ ddl	m
Z
 ddlmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZ  G d d	e      Z G d
 de      Zy)ap  
@package wxplot.histogram

@brief Histogramming using PyPlot

Classes:
 - histogram::HistogramPlotFrame
 - histogram::HistogramPlotToolbar

(C) 2011-2013 by the GRASS Development Team

This program is free software under the GNU General Public License
(>=v2). Read the file COPYING that comes with GRASS for details.

@author Michael Barton, Arizona State University
    N)StockCursor)BaseToolbar	BaseIcons)BasePlotFrame	PlotIcons)HistRasterDialogPlotStatsFrame)
RunCommand
GExceptionGErrorc                       e Zd ZdZej
                  ej                   ej                  dd      g fdZd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zy)HistogramPlotFramezCMainframe for displaying histogram of raster map. Uses wx.lib.plot.i  i  c                    t        j                  | |f||d| t        |       | _        t        j
                  dk7  r| j                  | j                         | j                  t        d             || _	        d| _
        d| _        t        d      | _        t        d      | _        t        d	      | _        d
| _        d| _        d| _        g d| _        | j'                          t)        | j                        dkD  rL| j+                  | j                  | j                        | _        t/        j0                  | j2                  d        y i | _        y )N)gifacesizeparentdarwinzHistogram Tool	histogram zHistogram ofRaster cell valuesCell countsrastercount   )bluegreenredyellowmagentacyanaquablackgreyorangebrownpurplevioletindigor   )r   __init__HistogramPlotToolbartoolbarsysplatform
SetToolBarSetTitle_
rasterListplottypegroupptitlexlabelylabelmaptypehisttypebins	colorList	_initOptslenInitRasterOptsr   wx	CallAfterOnCreateHist)selfr   r   idstyler   r2   kwargss           1/usr/lib/grass83/gui/wxpython/wxplot/histogram.pyr*   zHistogramPlotFrame.__init__"   s
    	tVPFPP+48<<8#OODLL)a()*
 %#
',-&	
" 	  1$--doot}}MDKLL**D1DK    c                 &    | j                  d       y)zInitialize plot optionsr   N)InitPlotOptsrB   s    rF   r<   zHistogramPlotFrame._initOpts[   s    +&rG   c                 ^   	 | j                  t        t        j                               | j	                          t        j
                          t        j                          | j                          | j                         }| j                  |       t        j                          y#  Y xY w)zMain routine for creating a histogram. Uses r.stats to
        create a list of cell value and count/percent/area pairs. This is passed to
        plot to create a line graph of the histogram.
        N)	SetCursorr   r?   CURSOR_ARROWSetGraphStyleBeginBusyCursor	SafeYieldSetupHistogramCreatePlotListDrawPlotEndBusyCursor)rB   eventps      rF   rA   zHistogramPlotFrame.OnCreateHist_   s{    
	NN;r78 	

!a
	s   (B( (B,c                    t        |       }|j                         t        j                  k(  r|j                  | _        |j
                  | _        |j                  | _        |j                  | _        |j                  | _        | j                  | j                  | j                        | _        t        | j                        dkD  r| j                  d       |j                          y)zSelect raster map(s) to profiler   r   N)rU   )r   	ShowModalr?   ID_OKr2   r4   r:   r9   r8   r>   r3   r   r=   rA   Destroy)rB   rU   dlgs      rF   OnSelectRasterz!HistogramPlotFrame.OnSelectRasterq   s    d+==?bhh&!nnDODJDILLDM;;DL--doot}}MDK 4??#a'!!!-rG   c                    t        | j                        dk(  ry| j                  D ]#  }| j                  |      | j                  |   d<   % | j                  dk(  rt        d      | j                  z  | _        nIt        | j                        dk(  r!t        d      | j                  d   z  | _        nt        d      | _        | j                  | j                  d      d	   }|d
k7  r|dk7  r|t        d      |z  | _        nt        d      | _        | j                  dk(  rt        d      | _
        | j                  dk(  rt        d      | _
        | j                  dk(  rt        d      | _
        yy)z(Build data list for plotting each rasterr   Ndatalistr4   zHistogram of image group <%s>   zHistogram of raster map <%s>z!Histogram of selected raster mapsunitsr   z(none)zRaster cell values %sr   r   r   percentzPercent of total cellsareaArea)r=   r2   CreateDatalistr   r8   r1   r4   r5   r6   r9   r7   )rB   rr`   s      rF   rQ   z!HistogramPlotFrame.SetupHistogram   sG    t1$ 	@A)-)<)<Q)?DKKN:&	@ <<7";<tzzIDK4??#q( >?$//RSBTT CD
 DOOA./8B;5H,1B34u<DK01DK
 ==G#M*DK==I%45DK==F"F)DK #rG   c           
         g }| j                   dk(  rd}| j                   dk(  rd}| j                   dk(  rd}	 t        d| || j                  dd	d	
      }|s|S |j                         D ]  }|j	                         j                  d      \  }}|j	                         }| j                  |   d   dk7  r4|d   dk(  rd|j                  d      d   z   }n|j                  d      d   }| j                   dk(  r|j                  d      }|j                  ||f        |S # t        $ r!}t        | |j                         Y d}~yd}~ww xY w)z}Build a list of cell value, frequency pairs for histogram
        frequency can be in cell counts, percents, or area
        r   cnra   pnrb   anzr.stats,T)r   inputflagsnstepssepquietreaddatatypeCELLr   -r_   %)r   messageN)r9   r
   r:   
splitlinesstripsplitr   rstripappendr   r   value)	rB   r   r^   freqflagretlinecellvalhistvales	            rF   rd   z!HistogramPlotFrame.CreateDatalist   sM    ==G#H==I%H==F"H 	yy	C ( 4#'::<#5#5c#: !--/;;v&z2f<qzS("%c(:1(="=")--"4Q"7==I-%nnS1G' 234 O 	$0	s    D CD 	E&EEc           	         g | _         | j                  D ]  }t        | j                  |   d         dkD  s#t	        j
                  | j                  |   d   d   | j                  |   d   d   | j                  |   d   d   d      }t        j                  | j                  |   d   || j                  |   d   | j                  | j                  |   d      | j                  |   d	   
      | j                  |   d<   | j                   j                  | j                  |   d           t        | j                         dkD  r| j                   S y)zMake list of elements to plotr^   r   pcolorr_      r   pwidthpstyleplegend)colourwidthrD   legendplineN)
plotlistr2   r=   r   r?   ColourplotPolyLinelinestyledictrz   )rB   re   cols      rF   rR   z!HistogramPlotFrame.CreatePlotList   s4     	>A4;;q>*-.2iiKKN8,Q/KKN8,Q/KKN8,Q/	 +/--KKN:.++a.2,,T[[^H-EF;;q>)4+Aw' $$T[[^G%<=#	>& t}}!== rG   c                 f    | j                          | j                         }| j                  |       y)z'Update histogram after changing optionsN)rN   rR   rS   )rB   rV   s     rF   UpdatezHistogramPlotFrame.Update   s(    !arG   c                 Z   g }t        d      }| j                  D ]@  }t        j                  d|dd      }t        d      |z  d|z  z   }|j	                  |       B t        | t        j                  ||      }|j                         t        j                  k(  r|j                          y	y	)
z-Displays regression information in messageboxz"Statistics for Map(s) Histogrammedzr.univarr   T)maprl   ro   zStatistics for raster map <%s>z:
%s
)rC   ru   titleN)r1   r2   grassread_commandrz   r	   r?   ID_ANYShowID_CLOSErZ   )rB   rU   ru   r   rastr}   statss          rF   OnStatszHistogramPlotFrame.OnStats   s    67OO 	"D$$ZTDQC67$>SPENN5!	"
 t		7%P::<2;;&MMO 'rG   N)__name__
__module____qualname____doc__r?   r   DEFAULT_FRAME_STYLESizer*   r<   rA   r\   rQ   rd   rR   r   r    rG   rF   r   r      sZ    M 99$$RWWS#7r'$$($T-^<rG   r   c                       e Zd ZdZd Zd Zy)r+   z$Toolbar for histogramming raster mapc                     t        j                  | |       t        j                  dk(  r|j	                  |        | j                  | j                                | j                          y )Nr   )r   r*   r-   r.   r/   InitToolbar_toolbarDataRealize)rB   r   s     rF   r*   zHistogramPlotToolbar.__init__  sP    T6* <<8#d#**,- 	rG   c                 v   | j                  dt        d   j                  ft        d   | j                  j                  fddt
        d   j                  ft
        d   | j                  j                  fdt        d   j                  ft        d   | j                  j                  fdt        d   j                  ft        d   | j                  j                  fdt        d	   j                  ft        d	   | j                  j                  fd
t        d   j                  ft        d   | j                  j                  fddt
        d   j                  ft
        d   | j                  j                  fdt        d   j                  ft        d   | j                  j                  fdt        d   j                  ft        d   | j                  j                  fddt
        d   j                  ft
        d   | j                  j                  fdt
        d   j                  ft
        d   | j                  j                  ff      S )zToolbar data	addrasteraddRast)NdrawerasedragpanzoomzoomInunzoom
zoomExtent
statisticsimagesaveFileprintsettingsoptionsquit)_getToolbarDatar   labelr   r\   r   rA   OnEraseOnDragOnZoomOnRedrawr   
SaveToFile	PrintMenuPlotOptionsMenuOnQuitrJ   s    rF   r   z!HistogramPlotToolbar._toolbarData  s)   ## !)I"6"<"<=i(KK..
 Yv.445f%KK,, i0667g&KK'' Yu-334e$KK&& Yx0667h'KK&& y6<<=l+KK((
 !9\#:#@#@Al+KK'' i
399:j)KK** i0667g&KK))
 9!5!;!;<i(KK// Yv.445f%KK&&m;=
 =	
rG   N)r   r   r   r   r*   r   r   rG   rF   r+   r+     s    .
?
rG   r+   )r   r-   r?   grass.scriptscriptr   wx.lib.plotlibr   gui_core.wrapr   gui_core.toolbarsr   r   wxplot.baser   r   wxplot.dialogsr   r	   	core.gcmdr
   r   r   r   r+   r   rG   rF   <module>r      sJ   "  	    % 4 0 ; 4 4n nbN
; N
rG   