dirEuclid = '/observ/euclid/' dirFilter = dirEuclid+'filters/' dirTaxo = dirEuclid+'taxonomy/' dirTaxo = '/home/bcarry/work/mining/euclid/taxo/' ;------ Read Euclid colors readcol, dirTaxo+'euclid-demeoColors.csv', $ ssoNum, ssoName, ssoClass, $ colVis, colY, colJ, colH, $ uncVis, uncY, uncJ, uncH, $ classId, compLabel, complexId, $ format='(F6,A-15,A-3,F7.4,F7.4,F7.4,F7.4,F7.4,F7.4,F7.4,F7.4,I2,A1,I1)', $ skipline=1, delim=',', /Silen nbSSO= n_elements( ssoNum ) ;------ Read PCA readcol, dirTaxo+'pca-371-11.csv', $ id, pca1, pca2, pca3, format='(I,F,F,F)', /Silent, skipline=1 PCAs = [ [pca1], [pca2], [pca3] ] nbPCA=3 ; PCAs = [ [colY], [colJ], [colH] ] ;--- Version with 8 classes ; cLabel=['A','B','C','D','K','S','X','V'] ; cColor=['Navy','Gray','Dark Gray','Green', 'Cornflower blue', 'Red', 'Royal blue', 'Black' ] ; cSymb =['Open Square', 'Filled circle', 'Open circle', 'Filled circle', $ ; 'Open square', 'Open square', 'Filled star', 'Filled diamond' ] ; nbTaxo=n_elements(cLabel) ;--- Version with 11 classes cLabel=['A','B','C','D','K','L','Q','S','T','X','V'] cColor=['Sienna' , $ ;-- A 'Gray' , $ ;-- B 'Charcoal' , $ ;-- C 'Dark Gray' , $ ;-- D 'Green' , $ ;-- K 'Navy', $ ;-- L 'Orange' , $ ;-- Q 'Cornflower blue', $ ;-- S 'PUR8' , $ ;-- T 'Magenta' , $ ;-- X 'Red' ] ;-- V cSymb =['Filled circle' , $ ;-- A 'Filled circle', $ ;-- B 'Open circle', $ ;-- C 'Filled circle', $ ;-- D 'Open circle', $ ;-- K 'Open square', $ ;-- L 'Filled star', $ ;-- Q 'Open square', $ ;-- S 'Star' , $ ;-- T 'Open diamond', $ ;-- X 'Filled Circle' ] ;-- V SSymb =[ 0.8 ,$ ;-- A 0.8 ,$ ;-- B 0.8 ,$ ;-- C 0.8 ,$ ;-- D 0.8 ,$ ;-- K 0.8 ,$ ;-- L 1.5 ,$ ;-- Q 0.8 ,$ ;-- S 1.5 ,$ ;-- T 0.8 ,$ ;-- X 0.8 ] ;-- V nbTaxo=n_elements(cLabel) comArr = intarr(nbTaxo,nbTaxo)+2 comArr[indgen(nbTaxo),indgen(nbTaxo)] = 0 ok_A=[6,7,10] & A=0 & comArr[A,ok_A]=1 & comArr[ok_A,A]=1 ok_B=[2,9] & B=1 & comArr[B,ok_B]=1 & comArr[ok_B,B]=1 ok_C=[9] & C=2 & comArr[C,ok_C]=1 & comArr[ok_C,C]=1 ok_D=[8] & D=3 & comArr[D,ok_D]=1 & comArr[ok_D,D]=1 ok_K=[5,7] & K=4 & comArr[K,ok_K]=1 & comArr[ok_K,K]=1 ok_L=[7] & L=5 & comArr[L,ok_L]=1 & comArr[ok_L,L]=1 ok_Q=[7,10] & Q=6 & comArr[Q,ok_Q]=1 & comArr[ok_Q,Q]=1 ok_S=[10] & S=7 & comArr[S,ok_S]=1 & comArr[ok_S,S]=1 ; ok_T=[2,9] & T=8 & comArr[T,ok_T]=1 & comArr[ok_T,T]=1 ; ok_X=[2,9] & X=9 & comArr[X,ok_X]=1 & comArr[ok_X,X]=1 ; ok_V=[2,9] & V=10 & comArr[V,ok_V]=1 & comArr[ok_V,V]=1 ;---- Compute mean average for each final class meanArr = fltarr(nbTaxo,nbPCA) stdArr = fltarr(nbTaxo,nbPCA) distArr = fltarr(nbTaxo,nbSSO) chi2Arr = fltarr(nbTaxo,nbSSO) miniTest=0 for k=0, nbTaxo-1 do begin cur = where( compLabel eq cLabel[k], N) miniTest+=N meanArrCl = [ mean(PCAs[cur,0]),$ mean(PCAs[cur,1]),$ mean(PCAs[cur,2]) ] stddArrCl = [ stddev(PCAs[cur,0]),$ stddev(PCAs[cur,1]),$ stddev(PCAs[cur,2]) ] meanArr[k,*] = meanArrCl stdArr[k,*] = stddArrCl chi2Arr[k,*] = ((PCAs[*,0]-meanArr[k,0])/stdArr[k,0])^2 +$ ((PCAs[*,1]-meanArr[k,1])/stdArr[k,1])^2 +$ ((PCAs[*,2]-meanArr[k,2])/stdArr[k,2])^2 distArr[k,*] = sqrt( chi2Arr[k,*]/3. ) endfor ; print, miniTest ;-SHOULD BE 317 ;---- to understand 1-2-3 sigma cuts ;--- check 123 sigma vs chi2 xx=findgen(100000)/10000. ;--- check 123 sigma vs chi2 yy = CHISQR_PDF(xx, 2) ;--- check 123 sigma vs chi2 sig1 = where( yy le 0.6827) ;--- check 123 sigma vs chi2 sig2 = where( yy ge 0.6827 and yy le 0.9545) ;--- check 123 sigma vs chi2 sig3 = where( yy ge 0.9545 and yy le 0.9973) ;--- check 123 sigma vs chi2 cgplot, xx, yy ;--- check 123 sigma vs chi2 cgPlot, /over, xx[sig1], yy[sig1], thick=2, color='Cornflower blue' ;--- check 123 sigma vs chi2 cgPlot, /over, xx[sig2], yy[sig2], thick=2, color='Orange' ;--- check 123 sigma vs chi2 cgPlot, /over, xx[sig3], yy[sig3], thick=2, color='Red' ;--- check 123 sigma vs chi2 ;--- check 123 sigma vs chi2 print, '1 sig: ', max(xx[sig1]) ;--- check 123 sigma vs chi2 print, '2 sig: ', max(xx[sig2]) ;--- check 123 sigma vs chi2 print, '3 sig: ', max(xx[sig3]) ;--- check 123 sigma vs chi2; wdelete ;--- check class by eye kX=0 ;--- check class by eye kY=1 ;--- check class by eye cgPlot, PCAs[*,kX], PCAs[*,kY], /NoData ;--- check class by eye theta=2*!PI*findgen(361)/360 ;--- check class by eye ;--- check class by eye for kT=0, nbTaxo-1 do begin ;--- check class by eye ;--- check class by eye cgPlot, meanArr[kT,kX]+stdArr[kT,kX]*cos(theta), $ ;--- check class by eye meanArr[kT,kY]+stdArr[kT,kY]*sin(theta), color=cColor[kT], /over ;--- check class by eye ;--- check class by eye cgErrPlot, meanArr[kT,kX], color=cColor[kT], $ ;--- check class by eye meanArr[kT,kY]-stdArr[kT,kY], meanArr[kT,kY]+stdArr[kT,kY] ;--- check class by eye cgErrPlot, meanArr[kT,kY], color=cColor[kT], meanArr[kT,kX]-stdArr[kT,kX], $ ;--- check class by eye meanArr[kT,kX]+stdArr[kT,kX], /horizontal ;--- check class by eye cgPlot, /over, meanArr[kT,kX], meanArr[kT,kY], psym='Filled Circle', symSize=1.5, color=cColor[kT] ;--- check class by eye ;--- check class by eye cgText, meanArr[kT,kX]+stdArr[kT,kX]*0.3, $ ;--- check class by eye meanArr[kT,kY]+stdArr[kT,kY]*0.3, cLabel[kT], color=cColor[kT] ;--- check class by eye ;--- check class by eye ;--- check class by eye endfor ;--- check class by eye ;--- check class by eye ;--- check class by eye class ='A' ;--- check class by eye n=strlen(class) ;--- check class by eye ;--- check class by eye cur = where( strcmp(ssoClass,class,/fold,n), nbCur ) ;--- check class by eye print, class, nbCur ;--- check class by eye cgPlot, /over, PCAs[cur,kX], PCAs[cur,kY], psym='filled square', color='BLACK' ;--- check class by eye ;--- check class by eye ;--- check class by eye trash='' ;--- check class by eye read, trash, prompt='Go?' ;--- check class by eye wdelete ;----- Compute agreement statistics limitChi=[4.605, 5.991, 7.378, 9.210, 13.816 ] percents=[90., 95, 97.5, 99, 99.9] nbLim=n_elements(limitChi) stat =intarr(nbLim,nbSSO) confidence =fltarr(nbLim,nbSSO) euclid=strarr(nbTaxo,nbSSO) print, 'Num Name BDM Com Euclid Chi2 Conf Rank Stat' for kSSO=0, nbSSO-1 do begin for kL=0, nbLim-1 do begin v= where( chi2Arr[*,kSSO] le limitChi[kL], nbV ) stat[kL,kSSO]=nbV endfor vals = where( stat[*,kSSO] eq 1 ) if vals[0] ne -1 then begin confidence[kSSO]= max( percents[vals] ) endif ord=sort( distArr[*,kSSO] ) cur=cLabel[ord] euclid[*,kSSO] = cur truth=where( strcmp(cur, compLabel[kSSO]) ) show1=' ' show2=' ' show3=' ' show4=' ' switch stat[0,kSSO] of 4: show4=cur[3] 3: show3=cur[2] 2: show2=cur[1] 1: show1=cur[0] else: endswitch print, ssoNum[kSSO], ssoName[kSSO], $ ssoClass[kSSO], compLabel[kSSO], $ show1, show2, show3, show4, $ min(chi2Arr[*,kSSO]), confidence[kSSo], truth, $ stat[0,kSSO], stat[1,kSSO], stat[2,kSSO], stat[3,kSSO], stat[4,kSSO], $ format='(I6,1x,A-15,3x,A-3,1x,A1,3x,A1,1x,A1,1x,A1,1x,A1,3x,'+$ 'F5.1,3x,F4.1,2x,I2,3x,I1,1x,I1,1x,I1,1x,I1,1x,I1)' endfor ; cgHistoPlot, reform(stat[0,*]), binSize=0.5, histdata=data, loc=xArr, /frequency ; ok=where(stat eq 1, nbOk) ; print, 'Agreement: ', nbOk, nbSSO, 100.*nbOk/nbSSO ;---- From DEMEO to Euclid print, '' print, '' print, '' print, 'For each Bus-DeMeo class ---> Euclid Taxonomic determination' for kT=0, nbTaxo-1 do begin cur = where( strcmp(compLabel, cLabel[kT]), nbDeMeo ) local = euclid[0,cur] uniqClass = local[ uniq( local, sort(local) ) ] nbUniq=n_elementS(uniqClass) numPerClass=intarr(nbUniq) frqPerClass=fltarr(nbUniq) for kU=0, nbUniq-1 do begin pp = where( strcmp(local,uniqClass[kU]), nbPP ) numPerClass[kU]=nbPP endfor frqPerClass=100.*numPerClass/nbDeMeo ord=reverse(sort(numPerClass)) print, '' print, cLabel[kT], ' -- ', uniqClass[ord[0]], numPerClass[ord[0]], frqPerClass[ord[0]], $ format='(A1,A4,A1,3x,I3,3x,F6.2)' if nbUniq gt 1 then begin for kU=1, nbUniq-1 do begin print, ' ', ' ', uniqClass[ord[kU]], numPerClass[ord[kU]], frqPerClass[ord[kU]], $ format='(A1,A4,A1,3x,I3,3x,F6.2)' endfor print, ' ', ' ', 'Tot', nbDeMeo, total(frqPerClass), $ format='(A1,A3,A3,2x,I3,3x,F6.2)' endif endfor ;---- From Euclid to DEMEO to Euclid print, '' print, '' print, '' print, 'For each Euclid Taxonomic determination --> Bus-DeMeo class' xmN = intarr(nbTaxo,nbTaxo) xmF = fltarr(nbTaxo,nbTaxo) xmL = strarr(nbTaxo,nbTaxo) xmV = fltarr(nbTaxo,nbTaxo) for kT=0, nbTaxo-1 do begin cur = where( strcmp( euclid[0,*], cLabel[kT]), nbEuclid ) local = compLabel[cur] uniqClass = local[ uniq( local, sort(local) ) ] nbUniq=n_elementS(uniqClass) numPerClass=intarr(nbUniq) frqPerClass=fltarr(nbUniq) for kU=0, nbUniq-1 do begin pp = where( strcmp(local,uniqClass[kU]), nbPP ) numPerClass[kU]=nbPP endfor frqPerClass=100.*numPerClass/nbEuclid ord=reverse(sort(numPerClass)) xmN[kT,0:nbUniq-1] = numPerClass[ord] xmF[kT,0:nbUniq-1] = frqPerClass[ord] xmL[kT,0:nbUniq-1] = uniqClass[ord] if cLabel[kT] eq 'A' then xmL[kT,0:nbUniq-1] = uniqClass[reverse(ord)] print, '' print, cLabel[kT], ' -- ', uniqClass[ord[0]], numPerClass[ord[0]], frqPerClass[ord[0]], $ format='(A1,A4,A1,3x,I3,3x,F6.2)' if nbUniq gt 1 then begin for kU=1, nbUniq-1 do begin print, ' ', ' ', uniqClass[ord[kU]], numPerClass[ord[kU]], frqPerClass[ord[kU]], $ format='(A1,A4,A1,3x,I3,3x,F6.2)' endfor print, ' ', ' ', 'Tot', nbEuclid, total(frqPerClass), $ format='(A1,A3,A3,2x,I3,3x,F6.2)' endif endfor statValid=fltarr(nbTaxo,3) statValid[*,0] = xmF[*,0] cgPS_open, Filename=dirTaxo+'valid-Euclid-DeMeo.eps', /metric, /decomposed, /encapsulated, $ xSize=25, ySize=18, language_level=2, /quiet cgBarPlot, reverse(xmF[*,0]), /Rotate, /normal, $ xStyle=1, xRange=[0,100], $ yStyle=1, yRange=[0,nbTaxo-1], $ barNames=reverse(cLabel), colors=reverse(cColor), $ xTitle='Fraction of classification', $ yTitle='Euclid classification', $ barCoords=yArr, $ position=[0.08,0.12,0.97,0.97] barSize=0.6675 barOffset=-0.33 last = xmF[*,0] for kE=1, nbTaxo-1 do begin colorVec=replicate('Black',nbTaxo) ; for kT=nbTaxo-1,0,-1 do begin for kT=0, nbTaxo-1 do begin p=where( strcmp(cLabel, xmL[kT,kE]) ) if p[0] ne -1 then begin colorVec[kT] = cColor[p[0]] if comArr[kT,p[0]] lt 2 then xmV[kT,kE]=1 statValid[*, comArr[kT,p[0]]] += xmF[*,kT] ; print, kE, kT, p[0], cLabel[kT], xmL[kT,kE], $ ; comArr[kT,p[0]], xmV[kT,kE], xmF[kT,kE], $ ; format='(4x,I2,3x,I2,5x,I2,3x,A1,1x,A1,3x,I1,1x,I1,2x,F5.1)' if xmV[kT,kE] eq 1 and xmF[kT,kE] gt 0.5 then begin base = last last[kT] += xmF[kT,kE] xx = base[kT] + [0,xmF[kT,kE],xmF[kT,kE],0,0] yy = [0,0,1,1,0]*barSize + barOffSet + yArr[nbTaxo-1-kT] cgPlot, /over, xx, yy, color=colorVec[kT] cgText, mean(xx[0:1]), yy[1] + (yy[2]-yy[1])/4., align=0.5, xmL[kT,kE], color=colorVec[kT] endif endif endfor endfor cgPS_close, /png, Delete_PS=0 stop ;----- Create individual plots theta=2*!PI*findgen(361)/360 xBot=0.12 yBot=0.12 xLen=0.86 yLen=0.86 for kX=0,1 do $ for kY= kX+1, 2 do begin idX = string(kX+1,format='(I1)') idY = string(kY+1,format='(I1)') name='PCA_'+idX+'_vs_'+idY+'.eps' cgPS_open, Filename=dirTaxo+name, /metric, /decomposed, /encapsulated, $ xSize=25, ySize=18, language_level=2, /quiet pX = kX mod 2 pY = 1 - kY/2 xTitle='Principal Component '+idY yTitle='Principal Component '+idY case string(px,format='(I1)')+string(py,format='(I1)') of ;-top left '01': begin xTickInt=0.4 xMin = -1.0 xMax = 0.6 yTickInt=0.2 yMin = -0.6 yMax = 0.4 end ;- bottom left '00': begin xTickInt=0.4 xMin = -1.0 xMax = 0.6 yTickInt=0.1 yMin = -0.2 yMax = 0.15 end ;- bottom right '10': begin xTickInt=0.2 xMin = -0.6 xMax = 0.4 yTickInt=0.1 yMin = -0.2 yMax = 0.15 end endcase xTicks=string( xMin+indgen(20)*xTickInt,format='(F4.1)') yTicks=string( yMin+indgen(20)*yTickInt,format='(F4.1)') xMinor=4 yMinor=4 cgPlot, PCAs[*,kX], PCAs[*,kY], /NoData, /Normal, $ xStyle=1, xRange=[xMin,xMax], xTickName=xTicks, xtickInt=xTickInt, xMinor=xMinor, $ yStyle=1, yRange=[yMin,yMax], yTickName=yTicks, ytickInt=yTickInt, yMinor=yMinor, $ xTitle=xTitle, $ yTitle=yTitle, $ position=[xBot, yBot, xBot+xLen, yBot+yLen] for kT=0, nbTaxo-1 do begin cur=where( strcmp(compLabel,cLabel[kT]) ) cgPlot, /over, PCAs[cur,kX], PCAs[cur,kY], psym=cSymb[kT], color=cColor[kT], symSize=sSymb[kT] endfor for kT=0, nbTaxo-1 do begin cgPlot, meanArr[kT,kX]+stdArr[kT,kX]*cos(theta), $ meanArr[kT,kY]+stdArr[kT,kY]*sin(theta), color=cColor[kT], /over cgErrPlot, meanArr[kT,kX], color=cColor[kT], $ meanArr[kT,kY]-stdArr[kT,kY], meanArr[kT,kY]+stdArr[kT,kY] cgErrPlot, meanArr[kT,kY], color=cColor[kT], meanArr[kT,kX]-stdArr[kT,kX], $ meanArr[kT,kX]+stdArr[kT,kX], /horizontal ; cgPlot, /over, meanArr[kT,kX], meanArr[kT,kY], psym='Filled Circle', symSize=1.5, color=cColor[kT] cgText, meanArr[kT,kX]+stdArr[kT,kX]*0.3, $ meanArr[kT,kY]+stdArr[kT,kY]*0.3, cLabel[kT], color=cColor[kT] endfor cgPS_close, /png, Delete_PS=0 endfor ;----- Create Single Plot cgPS_open, Filename=dirTaxo+'PCA.eps', /metric, /decomposed, /encapsulated, $ xSize=25, ySize=25, language_level=2, /quiet for kX=0,1 do $ for kY= kX+1, 2 do begin xBot=0.12 yBot=0.10 xLen=0.43 yLen=0.43 idX = string(kX+1,format='(I1)') idY = string(kY+1,format='(I1)') pX = kX mod 2 pY = 1 - kY/2 case string(px,format='(I1)')+string(py,format='(I1)') of ;-top left '01': begin xTickInt=0.4 xMin = -1.0 xMax = 0.6 xTicks=replicate(' ' , 20) yTickInt=0.2 yMin = -0.6 yMax = 0.4 yTicks=string( yMin+indgen(20)*yTickInt,format='(F4.1)') xTitle='' yTitle='PC'+idY end ;- bottom left '00': begin xTickInt=0.4 xMin = -1.0 xMax = 0.6 xTicks=string( xMin+indgen(20)*xTickInt,format='(F4.1)') yTickInt=0.1 yMin = -0.2 yMax = 0.15 yTicks=string( yMin+indgen(20)*yTickInt,format='(F4.1)') xTitle='PC'+idX yTitle='PC'+idY end ;- bottom right '10': begin xTickInt=0.2 xMin = -0.6 xMax = 0.4 xTicks=string( xMin+indgen(20)*xTickInt,format='(F4.1)') yTickInt=0.1 yMin = -0.2 yMax = 0.15 yTicks=replicate(' ' , 20) xTitle='PC'+idX yTitle='' end endcase xMinor=4 yMinor=4 cgPlot, PCAs[*,kX], PCAs[*,kY], /NoData, /Normal, /NoErase, $ xStyle=1, xRange=[xMin,xMax], xTickName=xTicks, xtickInt=xTickInt, xMinor=xMinor, $ yStyle=1, yRange=[yMin,yMax], yTickName=yTicks, ytickInt=yTickInt, yMinor=yMinor, $ xTitle=xTitle, yTitle=yTitle, $ position=[xBot + xLen*pX, $ yBot + pY*yLen, $ xBot + xLen*pX + xLen, $ yBot + pY*yLen + yLen] for kT=0, nbTaxo-1 do begin cur=where( strcmp(compLabel,cLabel[kT]) ) cgPlot, /over, PCAs[cur,kX], PCAs[cur,kY], psym=cSymb[kT], color=cColor[kT], symSize=sSymb[kT] endfor for kT=0, nbTaxo-1 do begin cgPlot, meanArr[kT,kX]+stdArr[kT,kX]*cos(theta), $ meanArr[kT,kY]+stdArr[kT,kY]*sin(theta), color=cColor[kT], /over cgErrPlot, meanArr[kT,kX], color=cColor[kT], $ meanArr[kT,kY]-stdArr[kT,kY], meanArr[kT,kY]+stdArr[kT,kY] cgErrPlot, meanArr[kT,kY], color=cColor[kT], meanArr[kT,kX]-stdArr[kT,kX], $ meanArr[kT,kX]+stdArr[kT,kX], /horizontal ; cgPlot, /over, meanArr[kT,kX], meanArr[kT,kY], psym='Filled Circle', symSize=1.5, color=cColor[kT] cgText, meanArr[kT,kX]+stdArr[kT,kX]*0.3, $ meanArr[kT,kY]+stdArr[kT,kY]*0.3, cLabel[kT], color=cColor[kT] endfor endfor for kT=0, nbTaxo-1 do begin cur=where( strcmp(compLabel,cLabel[kT]), nbCur ) ; cgText, /normal,xBot+1.5*xLen, yBot+(1.95-0.085*kT)*yLen, $ ; align=0.5, cLabel[kT]+'-types: '+strtrim(string(nbCur),2), color=cColor[kT] cgText, /normal,xBot+1.25*xLen, yBot+(1.95-0.085*kT)*yLen, $ align=0, cLabel[kT]+'-types:', color=cColor[kT] cgText, /normal,xBot+1.7*xLen, yBot+(1.95-0.085*kT)*yLen, $ align=1, strtrim(string(nbCur),2), color=cColor[kT] endfor cgPS_close, /png, Delete_PS=0 ;------- Validation figures for each class for kT=0, nbTaxo-1 do begin cgPS_open, Filename=dirTaxo+'class-'+cLabel[kT]+'-PCA.eps', /metric, /decomposed, /encapsulated, $ xSize=25, ySize=25, language_level=2, /quiet for kX=0,1 do $ for kY= kX+1, 2 do begin xBot=0.12 yBot=0.10 xLen=0.43 yLen=0.43 idX = string(kX+1,format='(I1)') idY = string(kY+1,format='(I1)') pX = kX mod 2 pY = 1 - kY/2 case string(px,format='(I1)')+string(py,format='(I1)') of ;-top left '01': begin xTickInt=0.4 xMin = -1.0 xMax = 0.6 xTicks=replicate(' ' , 20) yTickInt=0.2 yMin = -0.6 yMax = 0.4 yTicks=string( yMin+indgen(20)*yTickInt,format='(F4.1)') xTitle='' yTitle='PC'+idY end ;- bottom left '00': begin xTickInt=0.4 xMin = -1.0 xMax = 0.6 xTicks=string( xMin+indgen(20)*xTickInt,format='(F4.1)') yTickInt=0.1 yMin = -0.2 yMax = 0.15 yTicks=string( yMin+indgen(20)*yTickInt,format='(F4.1)') xTitle='PC'+idX yTitle='PC'+idY end ;- bottom right '10': begin xTickInt=0.2 xMin = -0.6 xMax = 0.4 xTicks=string( xMin+indgen(20)*xTickInt,format='(F4.1)') yTickInt=0.1 yMin = -0.2 yMax = 0.15 yTicks=replicate(' ' , 20) xTitle='PC'+idX yTitle='' end endcase xMinor=4 yMinor=4 cgPlot, PCAs[*,kX], PCAs[*,kY], /NoData, /Normal, /NoErase, $ xStyle=1, xRange=[xMin,xMax], xTickName=xTicks, xtickInt=xTickInt, xMinor=xMinor, $ yStyle=1, yRange=[yMin,yMax], yTickName=yTicks, ytickInt=yTickInt, yMinor=yMinor, $ xTitle=xTitle, yTitle=yTitle, $ position=[xBot + xLen*pX, $ yBot + pY*yLen, $ xBot + xLen*pX + xLen, $ yBot + pY*yLen + yLen] cur=where( strcmp(compLabel,cLabel[kT]), nbCur ) cgPlot, /over, PCAs[cur,kX], PCAs[cur,kY], psym=cSymb[kT], color=cColor[kT], symSize=sSymb[kT] for kT2=0, nbTaxo-1 do begin cgPlot, meanArr[kT2,kX]+stdArr[kT2,kX]*cos(theta), $ meanArr[kT2,kY]+stdArr[kT2,kY]*sin(theta), color=cColor[kT2], /over cgErrPlot, meanArr[kT2,kX], color=cColor[kT2], $ meanArr[kT2,kY]-stdArr[kT2,kY], meanArr[kT2,kY]+stdArr[kT2,kY] cgErrPlot, meanArr[kT2,kY], color=cColor[kT2], meanArr[kT2,kX]-stdArr[kT2,kX], $ meanArr[kT2,kX]+stdArr[kT2,kX], /horizontal ; cgPlot, /over, meanArr[kT2,kX], meanArr[kT2,kY], psym='Filled Circle', symSize=1.5, color=cColor[kT2] cgText, meanArr[kT2,kX]+stdArr[kT2,kX]*0.3, $ meanArr[kT2,kY]+stdArr[kT2,kY]*0.3, cLabel[kT2], color=cColor[kT2] endfor endfor cgText, /normal,xBot+1.5*xLen, yBot+1.5*yLen, $ align=0.5, cLabel[kT]+'-types: '+strtrim(string(nbCur),2), color=cColor[kT] cgPS_close, /png, Delete_PS=0 endfor end