
    c0i              	       Z   d Z ddlZddlZddlmZ ddlZddlZddl	m
Z ddlZddlmZ d#dZedk(  ro ej$                  d	
      Zej)                  dd       ej+                         Zej.                  j1                         Z ed      ez  e dz  Zej4                  Zej9                         s ede         ej<                  d        edej?                          d        ej@                  ed      Z!ddgZ"g dZ#e"D  cg c]  } | e!jH                  v s|  c} Z%e#D  cg c]  } | e!jH                  v s|  c} Z& ede%         ede&        e%D ]  Z' ede' d        ee!e'eedd        e&D ]  Z' ede' d        ee!e'eed d!         ed"       yyc c} w c c} w )$u  
Generate heatmaps for all key OSM road attributes (numeric and categorical).

Enhancements:
 - Automatically removes unused legend categories
 - Uses adaptive colormaps (Set2 → tab20 if >8 categories)
 - Prints unique values for diagnostics
 - Handles missing data gracefully
    N)Path)	colormapsinfernoFc                    | j                         }t        j                  d      \  }}|j                  j	                  d       |j	                  d       |j                          d|j                          }	t        d| d| d       t        ||   j                  d	             |r8||   j                         j                         }
t        |
      d
k(  r%t        d| d       t        j                  |       y t        |
      dkD  rt        d| d       ||   j                         j                  d      j                  }d|j                  ||   j                  |       |f<   ||   j                         j                         }
t        |
      dkD  rd}nd}|j!                  ||dd|ddd|t#        |
D cg c]  }t%        |       c}      ddddd       nt'        j(                  ||   d      ||<   ||   j                         j*                  r%t        d | d       t        j                  |       y t-        j.                  ||   j                         d!d"g      \  }}t1        j2                  |      j                         }|j5                  d#       |j!                  ||d|d|||d$d%d&dddd'	       |j7                  |	d(d)*       |j9                  d+       t        j:                          || d,| d-z  }t        j<                  |d.d/|j?                         0       t        j                  |       t        d1|j@                          y c c}w )2N)   
   )figsizez#f2f2f2u    — u   
🔎 Unique z values in :F)dropnar   u   ⚠️ No values found for z, skipping.   u   ⚠️ Too many categories in z, showing top 20.Other   tab20Set2Tg333333?)gRQ?   z
upper left)bbox_to_anchorloctitlelabelswhiteMissingnone)colorlabel	edgecolor)columnaxlegendcategoricalcmap	linewidthlegend_kwdsmissing_kwdscoerce)errorsu   ⚠️ No numeric data for    _   )r   g333333?g{Gz?)r   shrinkpad)	r   r    r!   r   r   vminvmaxr"   r#      r   )fontsizer)   off_z_heatmap.pngi,  tight)dpibbox_inches	facecoloru   💾 Saved heatmap: )!copypltsubplotspatchset_facecolor
capitalizeprintvalue_countsr   uniquelencloseheadindexr   isinplotsortedstrpd
to_numericemptynpnanpercentiler   get_cmapset_bad	set_titleaxistight_layoutsavefigget_facecolorname)gdfattrstatesave_dirr    r   	gdf_localfigr   r   unique_vals
top_values	cmap_namevr*   r+   cmap_objout_paths                     .scripts/exploratory/visualize_all_attribute.pyplot_attribute_mapr_      s:   
Ill8,GC III&Y!"%(9':;E	N4&E7!
45	)D/
&
&e
&
45o,,.557{q /v[ABIIcN {b 24&8IJK"4557<<R@FFJELIMM9T?//
;;TAB#D/00299;K {aII"+# +!>+Q#a&+!>?	 !"# 	 	
, --	$I	$T?!!#))/v[ABIIcN%%io&<&<&>BH
d%%d+002w'"&#dC "# 	 	
  LLL,GGENUG1TF,77HKKcw#BSBSBUVIIcN	 
01Y "?s   >M__main__z1Generate per-road attribute heatmaps for a state.)descriptionrT   zState name (e.g., alabama).)helpoutputz_roads_projected.gpkgu   ❌ File not found: r   u   📦 Loading road data for z...roads_projected)layerlaneswidth)surfacematerialbridgetunnelre   u   📊 Numeric attributes: u   🎨 Categorical attributes: u   
📈 Plotting z heatmap...)r    r   u   
🎨 Plotting z map...r   Tu3   
✅ All attribute heatmaps generated successfully!)r   F)(__doc__argparsesyspathlibr   	geopandasgpdpandasrE   matplotlib.pyplotpyplotr5   numpyrH   
matplotlibr   r_   __name__ArgumentParserparseradd_argument
parse_argsargsrT   lowergdf_pathparentrU   existsr:   exitr9   	read_fileroadsnumeric_attrscategorical_attrscolumnsavailable_numericavailable_categoricalrS   )as   0r^   <module>r      s    
       X2| z$X$$GF &CDDJJEH~%5'1F(GGHH??$XJ/0	'(8(8(:';3
?@CMM(*;<Eg&ML$1HMqQ%--5GMH(9P(91Q%--=OQ(9P	%&7%8
9:	)*?)@
AB! k235$xiUZ[ " & g./5$xfRVW & 

@AG * IPs   F#F#&F(:F(