Spaces:
Sleeping
Sleeping
| 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 | |