File size: 4,114 Bytes
164d1c0
 
 
 
 
 
 
b87b193
 
 
 
 
 
 
731c0dd
164d1c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
731c0dd
 
b87b193
164d1c0
731c0dd
 
 
d238bb5
731c0dd
 
164d1c0
 
b87b193
164d1c0
 
b87b193
164d1c0
 
b87b193
164d1c0
 
1189f83
731c0dd
164d1c0
 
1189f83
731c0dd
164d1c0
 
e301a24
 
164d1c0
e301a24
 
164d1c0
 
b87b193
e301a24
164d1c0
 
 
 
 
 
 
 
 
 
 
 
b87b193
 
 
 
 
164d1c0
 
 
 
 
 
0b30b31
164d1c0
 
 
b36c6ed
b87b193
e301a24
164d1c0
 
b36c6ed
164d1c0
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cm as cm
import matplotlib.gridspec as gridspec


def show_two_plots(gdf, name1, name2, vmin, vmax, colorscheme, title1, title2, label, split=False):
    #dynamically change marker size
    n_points = len(gdf)
    marker_size = 8500 / n_points  
    marker_size = max(2, min(marker_size, 200))
    filter_marker_size = marker_size*0.6
    print(marker_size)

    print('split', split)
    if gdf.empty:
        raise ValueError("GeoDataFrame is empty")

    required_cols = [name1, name2]
    for col in required_cols:
        if col not in gdf.columns:
            raise ValueError(f"Column '{col}' not found in gdf")

    #Create a shared colormap and normalization
    cmap = plt.colormaps[colorscheme]
    norm = colors.Normalize(vmin=vmin, vmax=vmax)
    
    # Create subplots
    fig = plt.figure(figsize=(12, 6))
    gs = gridspec.GridSpec(1, 3, width_ratios=[1, 1, 0.05], wspace=0.3)

    axes = [fig.add_subplot(gs[0]), fig.add_subplot(gs[1]), fig.add_subplot(gs[2]) ]

    if split == False:
        # First plot 
        gdf.plot(column=name1, cmap=cmap, norm=norm, ax=axes[0], marker='s', markersize=marker_size)
    
    else:
        # Split data into three GeoDataFrames
        # below_100 = gdf[gdf[split] <= 100]
        above_capacity = gdf[gdf[split] > (100-gdf['Pct_Construccion'])]
        above_100 = gdf[gdf[split] > 100]
        above_colors = {"capacity":"chocolate", "100":"firebrick"}
        
        # Plot values ≤ 100 using colormap
        gdf.plot(column=name1, cmap=colorscheme, ax=axes[0], vmin=vmin, vmax=vmax, marker='s', markersize=marker_size)
        
        # Plot values > capacity in orange
        above_capacity.plot(color=above_colors['capacity'], ax=axes[0], label='> capacidad debido a la construcción', marker='x', markersize=filter_marker_size)
        
        # Plot values > 100 in red
        above_100.plot(color=above_colors['100'], ax=axes[0], label='> 100% cobertura arbórea', marker='x', markersize=filter_marker_size)
        
        # Add legend manually for orange points
        orange_patch = plt.Line2D([0], [0], marker='o', color='w', label='> capacidad debido a la construcción', 
                               markerfacecolor=above_colors['capacity'], markersize=8)
    
        # Add legend manually for red points
        red_patch = plt.Line2D([0], [0], marker='o', color='w', label='> 100% cobertura arbórea', 
                               markerfacecolor=above_colors['100'], markersize=8)
        
        axes[0].legend(handles=[orange_patch, red_patch])
    # axes[0].set_title(title1)
    axes[0].set_title(title1, pad=-30)
    axes[0].set_axis_off()
    


    # Second plot (original)
    gdf.plot(column=name2, cmap=cmap, norm=norm, ax=axes[1],marker='s', markersize=marker_size)
    axes[1].set_title(title2, pad=-30)
    axes[1].set_axis_off()
    

    # Shared colorbar
    sm = cm.ScalarMappable(cmap=cmap, norm=norm)
    sm._A = []  # Dummy array for the colormap
    cbar = fig.colorbar(sm, cax=axes[2], orientation='vertical', fraction=0.03, pad=0.02)
    cbar.set_label(label)
    
    return fig

def show_one_plot(gdf, name, vmin, vmax, colorscheme, title, label):
    #dynamically change marker size
    n_points = len(gdf)
    marker_size = 8500 / n_points  
    marker_size = max(2, min(marker_size, 200))

    # Second set of plots
    cmap = plt.colormaps[colorscheme]
    norm = colors.Normalize(vmin, vmax)

    # Create subplots
    fig = plt.figure(figsize=(12, 6))
    gs = gridspec.GridSpec(1, 2, width_ratios=[1, 0.025], wspace=0.3)

    axes = [fig.add_subplot(gs[0]), fig.add_subplot(gs[1])]
    

    gdf.plot(column=name, cmap=cmap, norm=norm, ax=axes[0], marker='s', markersize=marker_size)
    axes[0].set_title(title, pad=-30)
    axes[0].set_axis_off()

    # Add a colorbar
    sm = cm.ScalarMappable(cmap=cmap, norm=norm)
    sm._A = []  # Dummy data for the colorbar
    cbar = fig.colorbar(sm, cax=axes[1], orientation='vertical', fraction=0.03, pad=0.02)
    cbar.set_label(label)


    return fig