Skip to content
Snippets Groups Projects
Select Git revision
  • cc4a3c7fc9e5582bfa4e2a03e092f44dc0287e06
  • master default protected
  • optimise-space-split-tpool
  • split-space-split
  • better-space-split-tpool
  • melion/BalsaraKim
  • darwin/gear_preSN_fbk_merge
  • reyz/gear_preSN_feedback
  • mark_bug
  • FS_VP_m2_allGrad
  • nickishch/MHD_canvas/OWAR_fully_symmetric_ShearAndRotation
  • fstasys/VEP_Fm2
  • beyond-mesh-pair-removal
  • darwin/gear_chemistry_fluxes
  • MHD_canvas protected
  • sidm_merge protected
  • fewer_gpart_comms
  • zoom_merge protected
  • MAGMA2_matthieu
  • darwin/sink_mpi_physics
  • darwin/gear_mechanical_feedback
  • v2025.10 protected
  • v2025.04 protected
  • v2025.01 protected
  • v1.0.0 protected
  • v0.9.0 protected
  • v0.8.5 protected
  • v0.8.4 protected
  • v0.8.3 protected
  • v0.8.2 protected
  • v0.8.1 protected
  • v0.8.0 protected
  • v0.7.0 protected
  • v0.6.0 protected
  • v0.5.0 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0-pre protected
  • v0.1 protected
  • v0.0 protected
41 results

conf.py

Blame
  • generate_map.py 1.97 KiB
    import os
    from bokeh.models import ColumnDataSource, WheelZoomTool, HoverTool
    from bokeh.plotting import figure, save
    import numpy as np
    import pandas as pd
    import xyzservices.providers as xyz
    
    # Read in data
    df = pd.read_csv('data/swift_users.txt', sep=r'\s+')
    
    # Convert latitude & longitde to metcator coordinates
    def wgs84_to_web_mercator(lon, lat):
        k = 6378137
        x = lon * (k * np.pi/180.0)
        y = np.log(np.tan((90 + lat) * np.pi/360.0)) * k
        return x, y
    df["x"], df["y"] = wgs84_to_web_mercator(df["Longitude"], df["Latitude"])
    
    # Set map bounds
    min_lon, max_lon = -180, 180
    min_lat, max_lat = -56, 70
    min_x, min_y = wgs84_to_web_mercator(min_lon, min_lat)
    max_x, max_y = wgs84_to_web_mercator(max_lon, max_lat)
    
    # Create map
    p = figure(
        x_range=(min_x, max_x),
        y_range=(min_y, max_y),
        x_axis_type="mercator", y_axis_type="mercator",
        title=None,
        sizing_mode="scale_width",
        aspect_ratio=1.9,
    )
    tile_provider = xyz.CartoDB.Voyager
    p.add_tile(tile_provider)
    
    # Plot users
    for cat, color in [
            ('Community', 'blue'),
            ('Core', 'red'), 
        ]:
        source = ColumnDataSource(df[df['Category'] == cat])
        p.scatter(x="x", y="y", size=15, fill_color=color, fill_alpha=0.8, source=source, line_color='black', line_width=2, legend_label=cat)
    hover = HoverTool(tooltips=[
        ("Institute", "@Name"),
    #    ("Description", "@Description"),
    ])
    p.add_tools(hover)
    
    # Activate wheel zoom
    for tool in p.tools:
        if isinstance(tool, WheelZoomTool):
            p.toolbar.active_scroll = tool
            break
    
    # Apply bounds to the plot ranges
    p.x_range.bounds = (min_x, max_x)
    p.y_range.bounds = (min_y, max_y)
    
    # Zoom level limit
    p.x_range.min_interval = 10**5.5
    p.x_range.max_interval = max_x - min_x
    p.y_range.min_interval = 10**5.5
    p.y_range.max_interval = max_y - min_y
    
    # Legend
    p.legend.location = "top_left"
    p.legend.label_text_font_size = "20pt"
    
    # Save
    os.makedirs('user_map', exist_ok=True) 
    save(p, 'user_map/swift_users.html', title='SWIFT Users', resources='inline')