;i,ddlmZddlZddlmZddlmZddlmZ ddl m Z ddl m Z mZd d lmZd d lmZd d lmZd gZGdd ejZdS)) OrderedDictN) functions)getConfigOption) parametertree)TextItem)QtCore QtWidgets)ColorMapParameter)DataFilterParameter) PlotWidgetScatterPlotWidgetceZdZdZejeeeZejeeeZddZ ddZ dZ dZ dZ dZd Zd Zd Zd Zd ZdZdZdS)ra2 This is a high-level widget for exploring relationships in tabular data. Given a multi-column record array, the widget displays a scatter plot of a specific subset of the data. Includes controls for selecting the columns to plot, filtering data, and determining symbol color and shape. The widget consists of four components: 1) A list of column names from which the user may select 1 or 2 columns to plot. If one column is selected, the data for that column will be plotted in a histogram-like manner by using :func:`pseudoScatter() `. If two columns are selected, then the scatter plot will be generated with x determined by the first column that was selected and y by the second. 2) A DataFilter that allows the user to select a subset of the data by specifying multiple selection criteria. 3) A ColorMap that allows the user to determine how points are colored by specifying multiple criteria. 4) A PlotWidget for displaying the data. Nc<tj|tjjjtjtjjj|_| |jtj |_ |j |j j jtjd|_t#|_t'|_tjdd|j|jg|_|j|jdt3|_|j |j |j |j| |jt7jt;d}|dt?t;d| |_ |j !d d |j "|jj#d|_$d|_%d|_&d|_'d|_(g|_)tUdd |_+d|_,d|_-d|_.d|_/|j j01|j2|jj31|j4|jj51|j6dS)NF) showHeaderparamsgroup)nametypechildren)showTop foreground)bordercolor<o)pensymbol)7r QSplitter__init__r Qt Orientation HorizontalVertical ctrlPanel addWidget QListWidget fieldListsetSelectionMode SelectionModeExtendedSelectionptree ParameterTreer filterr colorMap Parametercreater setParametersrplotfnmkColorrsetAlphar filterTextsetPos setParentItemplotItemdataindicesmouseOverField scatterPlotselectionScatterselectedIndicesdictstyle _visibleXY _visibleData_visibleIndices _indexMapitemSelectionChangedconnectfieldSelectionChangedsigFilterChanged filterChangedsigColorMapChanged updatePlot)selfparentfgs WC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\pyqtgraph/widgets/ScatterPlotWidget.pyr#zScatterPlotWidget.__init__)sv$$T69+@+KLLL",VY-B-KLL t~&&&".00 ''(D(VWWW(E::: )++ )++ o,,(TXT_aeanSo,pp    e <<<LL    000   ,,, ty!!! Z 55 6 6 C"/,*G*GrRRR r"%%% %%di&8999  " $!d3///  # +33D4NOOO $,,T-?@@@ (00AAAAAcPt||_||_|j|D]:\}}t j|}||_|j|};|j ||j |dS)z Set the list of field names/units to be processed. The format of *fields* is the same as used by :meth:`~pyqtgraph.widgets.ColorMapWidget.ColorMapParameter.setFields` N) rfieldsr@r+clearr QListWidgetItemoptsaddItemr1 setFieldsr2)rQrWr@frZitems rTr\zScatterPlotWidget.setFieldsPs"&)) ,  0 0FAd,Q//DDI>))$//DD f%%% '''''rUc"|jj|j |j|D]j}t |j|}|j |}| dk |jj |jn)#|jj |jwxYw|dS)NT) r+rJ disconnectrLclearSelectionlistrWkeysindexr^ setSelectedrK)rQrWr]ir^s rTsetSelectedFieldsz#ScatterPlotWidget.setSelectedFieldsas +66t7QRRR T N ) ) + + + ' '))++,,22155~**1--  &&&& ' N / 7 78R S S S SDN / 7 78R S S S S ""$$$$$s BC&C8c||_tjt||_d|_d|_|dS)zm Set the data to be processed and displayed. Argument must be a numpy record array. N)r>nparangelenr?filteredfilteredIndicesrP)rQr>s rTsetDatazScatterPlotWidget.setDatamsG  yT++  # rUc<||_|dS)zMark the specified indices as selected. Must be a sequence of integers that index into the array given in setData(). N)rCupdateSelected)rQindss rTsetSelectedIndicesz$ScatterPlotWidget.setSelectedIndicesxs$ $ rUcD|d|DdS)zMark the specified points as selected. Must be a list of points as generated by the sigScatterPlotClicked signal. cg|] }|j S) originalIndex).0pts rT z7ScatterPlotWidget.setSelectedPoints..s C C Cb!1 C C CrUN)rr)rQpointss rTsetSelectedPointsz#ScatterPlotWidget.setSelectedPointss-  C CF C C CDDDDDrUcv|j}t|dkrx|jd |ddD]}|d |jdn#|jdwxYw|dS)NrTr F)r+ selectedItemsrk blockSignalsrerP)rQselr^s rTrLz'ScatterPlotWidget.fieldSelectionChangedsn**,, s88a<< N ' ' - - - 3"I,,D$$U++++,++E2222++E2222 s "BB"cZd|_||j}t |dkr|jddS|jd||jddS)NrF T) rlrPr1describerkr: setVisiblesetTextjoin)rQr]descs rTrNzScatterPlotWidget.filterChangeds  {##%% t99>> O & &u - - - - - O # #DIIdOO 4 4 4 O & &t , , , , ,rUc  |j|jt|jdkrdS|jC|j|j}|j||_|j||_|j}t|dkrdStj d|j |D}|j }td|jD}td|jD}t|dkr|jddSt|dkrQ|jd|d|dfdt|dkrdS||ddg}n|t|d kri|j|d|df|d|df t|dkrdS||d||dg}d d g}d D]/} |jd dg| } || |j|| dddks|| jjdvr|j|| dtt3|| tj fd|| Dt4|| <| tt9gd|| <| d1tjt|dt<}|djjdkr|tj|dz}|d3|djjdkr|tj|dz}|d||d<|||d<||}|j|} |dtAj!|d|d<n|d||d<d D]} || s t|| dkr'tE|| #nd} tI| dzD]} || | k}tAj!|d| z |d}t|dkrGtj%|#}|dkr|d|z z}|| |xx|z cc<|j&- |j&j'(|j)n#YnxYw||_*||_+| |_,d|_-|jj|d|dfd|i||_&|j&j'.|j)|j&j/.|j0|1dS)Nrc*g|]}tj|Sru)r7mkBrush)rwxs rTryz0ScatterPlotWidget.updatePlot..sKKKa2:q>KKKrUcPg|]#}t|$Sru)strtextrwr^s rTryz0ScatterPlotWidget.updatePlot..s(PPPC $$PPPrUcDg|]}|jddS)units)rZgetrs rTryz0ScatterPlotWidget.updatePlot..s(\\\TdimmGR00\\\rUrr )Nr)leftbottomtitler)rrF)rr rrmodeenum)SOvaluesc`g|]*}|vr|nt+Sru)rdrk)rwrvalss rTryz0ScatterPlotWidget.updatePlot..s6![![![PQ199$**Q---#d))![![![rU)dtypeTr] symbolBrush)bidirg?r>)2r6rXr>rkrlr1 generateMaskr?rmriarrayr2maprEcopyrbr+r~setTitle setLabelsgetAxisrWrrkindsetfloatsetTicks enumerateonesboolisfiniter7 pseudoScatterintmaxrangeabsrAsigPointsClickedr` plotClickedrFrGrHrIrKsigPointsHovered plotHoveredrp)rQmaskr>colorsrErrxyrrfaxisr?aximaxkeymaskscattersmaxrs @rTrPzScatterPlotWidget.updatePlots  9 DI! 3 3 F = ;++DI66D IdODM#'<#5D } t99>> FKK4=3D3DT3J3JKKKLL !!PP1M1M1O1OPPPQQ\\T^=Y=Y=[=[\\\]] s88q== I  r " " " F s88q== I  YAa7IQS  T T T4yyA~~s1v,%BB XX]] I  c!fU1X%6AuQx?P  Q Q Q4yyA~~s1v,SV -Bu~ $ $A9$$h%7%:;;D!u dk#a&&9&=&=fd&K&Kv&U&UY[\]Y^YdYimwYwYw{3q6*..xc"Q%jj9I9IJJ![![![![UWXYUZ![![![chiii1 tIdOO445666Q d####ws2a5zz... a5; s " " BK1&& &D a5 A!1S!8!8 BK1&& &D1d 1%d|mDz&t, a5=$RU++BqEEqE$KBqE / /Bx,/2KK!OOs2b6::<<(((tAv//A fkG .r!B$x/@MMMG7||q(( 6'??..00Dqyy3:-rF7OOOw.OOOO/   '  1<"Q%AKKTKUKK )11$2BCCC )11$2BCCC s $V==Wc |jdS|fd|jD}|jd||jd|}}|j$|jj|jt|dkrdS|j||ddddd|_dS)Nc(g|]}|v|Sruru)rwrfindMaps rTryz4ScatterPlotWidget.updateSelected..s"GGGa1;;q ;;;rUrr s y)r r! symbolSizer symbolPen)rF _getIndexMaprCrBr6r= removeItemrk)rQrqrrrs @rTrpz ScatterPlotWidget.updateSelected s ? " F""$$GGGG4#7GGGoa &(:4(@!  , I  ) )$*? @ @ @ q66Q;; F $ q!cVXfjvy z zrUcd|j#dt|jD|_|jS)Nci|]\}}|| Sruru)rwrfjs rT z2ScatterPlotWidget._getIndexMap..sMMMcaaMMMrU)rIrrH)rQs rTrzScatterPlotWidget._getIndexMaps2 > !MMYt7K-L-LMMMDN~rUc|D]&}|j||_'|j|||dSN)rHrdrvsigScatterPlotClickedemit)rQr6rzevrxs rTrzScatterPlotWidget.plotClickedsO @ @B#3BHHJJ?B   "''fb99999rUc>|j|||dSr)sigScatterPlotHoveredr)rQr6rzrs rTrzScatterPlotWidget.plotHovered$s# "''fb99999rUr)__name__ __module__ __qualname____doc__r Signalobjectrrr#r\rgrnrrr{rLrNrPrprrrrurUrTrrs(**FM&&&AA)FM&&&AA%B%B%B%BN((((" % % %   EEE   ---kkkZ { { { ::: :::::rU) collectionsrnumpyrirrr7rrr/graphicsItems.TextItemrr$r r ColorMapWidgetr DataFilterWidgetr r__all__r"rrurUrTrs######%%%%%%------""""""""------111111""""""  U:U:U:U:U: +U:U:U:U:U:rU