
    ը	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
mZ ddlmZmZ ddlmZ ddlmZmZ ddlmZmZmZmZ  G d d	e
      Z G d
 de      Zy)a\  
@package wxplot.scatter

@brief Scatter plotting using PyPlot

Classes:
 - scatter::ScatterFrame
 - scatter::ScatterToolbar

(C) 2011 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)BasePlotFrame	PlotIcons)BaseToolbar	BaseIcons)StockCursor)ScatterRasterDialogPlotStatsFrame)
RunCommand
GExceptionGErrorGMessagec                       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)ScatterFramezUMainframe for displaying bivariate scatter plot of two raster maps. Uses wx.lib.plot.i  i  c                 :   t        j                  | |f||d| t        |       | _        t        j
                  dk7  r| j                  | j                         | j                  t        d             || _	        d| _
        t        d      | _        t        d      | _        t        d      | _        d| _        d	| _        d
| _        g d| _        | j%                          t'        | j                        dkD  r| j)                  | j                  d       y i | _        y )N)gifacesizeparentdarwinz GRASS Bivariate Scatterplot ToolscatterzBivariate ScatterplotzRaster cell valuesrasternormal   )blueredblackgreenyellowmagentacyanaquagreyorangebrownpurplevioletindigo   )r   __init__ScatterToolbartoolbarsysplatform
SetToolBarSetTitle_
rasterListplottypeptitlexlabelylabelmaptypescattertypebins	colorList	_initOptslenInitRasterOptsr   )selfr   r   idstyler   r1   kwargss           //usr/lib/grass83/gui/wxpython/wxplot/scatter.pyr)   zScatterFrame.__init__"   s     	tVPFPP%T2<<8#OODLL)a:;<
 %!/0,-,-#	
" 	  1$;DK    c                 &    | j                  d       y)zInitialize plot optionsr   N)InitPlotOptsr=   s    rA   r:   zScatterFrame._initOptsY   s    )$rB   c                    | j                  t        t        j                               | j	                          t        j
                          t        j                          | j                          | j                         }|r&| j                  |       t        j                          yt        j                          t        t        d      |        y)zMain routine for creating a scatterplot. Uses r.stats to
        create a list of cell value pairs. This is passed to
        plot to create a scatterplot.
        Nothing to plot.r   N)	SetCursorr   wxCURSOR_ARROWSetGraphStyleBeginBusyCursor	SafeYieldSetupScatterplotCreatePlotListDrawPlotEndBusyCursorr   r0   )r=   eventps      rA   OnCreateScatterzScatterFrame.OnCreateScatter]   s    
 	{2??34

!MM!Q)*48rB   c                    t        |       }|j                          |j                         t        j                  k(  r|j                         | _        | j                  st        t        d      |       y|j                         \  | _
        | _        | j                  | j                  d      | _        | j                  r| j                  d       |j                          y)zSelect raster map(s) to profiler   z(At least 2 raster maps must be specifiedNr   )rR   )r   CenterOnParent	ShowModalrI   ID_OKGetRasterPairsr1   r   r0   GetSettingsr7   r8   InitRasterPairsr   rT   Destroy)r=   rR   dlgs      rA   OnSelectRasterzScatterFrame.OnSelectRastero   s    !.==?bhh&!002DO??EFsS +.//*;'Ddi..DK
 $$4$0rB   c                 F   t        d      | _        t        | j                        dk(  ry| j                  D ]h  }| j	                  |      | j
                  |   d<   | xj                  |d   j                  d      d   d|d   j                  d      d   dz  c_        j | j                  j                  d      | _        t        d	      d   j                  d      d   z  | _        t        d	      |d   j                  d      d   z  | _	        | j
                  | j                  d      d   d
   }|dk7  r!| xj                  t        d      |z  z  c_        | j
                  | j                  d      d   d
   }|dk7  r"| xj                  t        d      |z  z  c_	        yy)z(Build data list for plotting each rasterzBivariate Scatterplot of r   Ndatalist@z vs r(   z, zRaster <%s> cell valuesunits z: %s)
r0   r3   r;   r1   CreateDatalistr   splitstripr4   r5   )r=   rpairrb   s      rA   rN   zScatterFrame.SetupScatterplot   s|    34
 t1$__ 	E-1-@-@-GDKKz* KKas#A&as#A& K		 kk''-
 12U1X^^C5H5KK12U1X^^C5H5KKDOOA./27;B;KK1V9u,,KDOOA./27;B;KK1V9u,,K rB   c           
         g }| j                   dk(  rd}nd}	 t        d| d|z  || j                  ddd      }|s|S |j                         D ]  }|j	                         j                  d      \  }}|j	                         }d	|v r4|d
   d	k(  rd	|j                  d	      d   z   }n|j                  d	      d
   }|j	                         }d	|v r4|d
   d	k(  rd	|j                  d	      d   z   }n|j                  d	      d
   }|j                  dd      }|j                  d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
        bubblecnnzr.statsz%s,%s,T)r   inputflagsnstepssepquietread-r   r(   asciiignore)r   messageN)r7   r
   r8   
splitlinesrf   re   encodeappendr   r   value)	r=   rg   r`   freqflagretlinerast1rast2es	            rA   rd   zScatterFrame.CreateDatalist   sr    x'HH'	oyy	C ( 0#zz|11#6u%<Qx3 #ekk#&6q&9 9 %C 0 3%<Qx3 #ekk#&6q&9 9 %C 0 3Wh7Wh7/'0* O 	$0	s   #D< C?D< <	E&E!!E&c           
         g | _         | j                  D ]-  }d| j                  |   vs| j                  |   d   (t        | j                  |   d         dkD  sGt	        j
                  | j                  |   d   d   | j                  |   d   d   | j                  |   d   d   d      }t        j                  | j                  |   d   d| j                  |   d   z   || j                  |   d	   | j                  | j                  |   d
      | j                  |   d         }| j                   j                  |       0 | j                   S )zMake list of elements to plotr`   r   pcolorr(      r    plegendpsizepfillptype)legendcolourr   	fillstylemarker)
plotlistr1   r   r;   rI   Colourplot
PolyMarker
ptfilldictry   )r=   rg   colscatterpointss       rA   rO   zScatterFrame.CreatePlotList   sJ    __ 	4E$++e"44;;u%j194;;u%j12Q6iiKK&x03KK&x03KK&x03	 !%KK&z2U!3I!>>U+G4"oodkk%.@.IJ;;u-g6! $$]3/	42 }}rB   c                     | j                          | j                         }|r| j                  |       yt        t	        d      |        y)z'Update histogram after changing optionsrG   r   N)rK   rO   rP   r   r0   )r=   rS   s     rA   UpdatezScatterFrame.Update  s;    !MM!Q)*48rB   c                    g }t        d      }| j                  D ]  }t        |t              s|\  }}|j	                  d      d   }|j	                  d      d   }t        j                  d||ddt
        j                  ddif	      }t        d
      ||dz  }d|d|d   d|d   d|d	}	d|d   z  }
d|d   z  }dt        t        |d         d      z  }d|d   z  }||	z   |
z   |z   |z   |z   }|j                  |        t        | t        j                  ||      }|j                         t        j                  k(  r|j!                          yy)z-Displays regression information in messageboxz(Regression Statistics for Scatterplot(s)ra   r   zr.regression.linegTrp   =)mapxmapyrn   rq   parsezARegression equation for raster map <%(rast1)s> vs. <%(rast2)s>:

)r~   r   z   z = az + b(z)

zN = %s
NzR = %s
RzR-squared = %f
r   zF = %s
F)r>   rv   titleN)r0   r1   
isinstancetuplere   grassparse_commandparse_key_valpowfloatry   r	   rI   ID_ANYShowID_CLOSEr\   )r=   rR   rv   r   rg   r~   r   r|   eqtitleeqnumrvalrsqfteststrstatss                   rA   OnRegressionzScatterFrame.OnRegression
  sh   <=__ 	 EeU+ LE5KK$Q'EKK$Q'E%%#**UCL9C U%01G /4SXs3xOBs3x'CC(D$s5S?A'>>CS)EB,$t+c1E9CNN3/	 2 t		7%P::<2;;&MMO 'rB   N)__name__
__module____qualname____doc__rI   r   DEFAULT_FRAME_STYLESizer)   r:   rT   r^   rN   rd   rO   r   r    rB   rA   r   r      s[    _ 99$$RWWS#5n%9$.%-N2h@9!rB   r   c                       e Zd ZdZd Zd Zy)r*   z6Toolbar for bivariate scatterplots of raster map pairsc                     t        j                  | |       t        j                  dk(  r|j	                  |        | j                  | j                                | j                          y )Nr   )r   r)   r,   r-   r.   InitToolbar_toolbarDataRealize)r=   r   s     rA   r)   zScatterToolbar.__init__1  sP    T6* <<8#d#**,- 	rB   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zoomBack
statisticsimagesaveFileprintsettingsoptionsquit)_getToolbarDatar   labelr   r^   r   rT   OnEraseOnDragOnZoomOnRedrawr   
SaveToFile	PrintMenuPlotOptionsMenuOnQuitrE   s    rA   r   zScatterToolbar._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4::;j)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;=
 =	
rB   N)r   r   r   r   r)   r   r   rB   rA   r*   r*   .  s    @
?
rB   r*   )r   r,   rI   grass.scriptscriptr   wx.lib.plotlibr   wxplot.baser   r   gui_core.toolbarsr   r   gui_core.wrapr   wxplot.dialogsr   r	   	core.gcmdr
   r   r   r   r   r*   r   rB   rA   <module>r      sJ   "  	    0 4 % > > >L= L^N
[ N
rB   