In [1]:
# Import Libraries
import pygmt
import pandas as pd
import numpy as np
import sys
import scipy
from scipy.ndimage import generic_filter
import xarray as xr
# Show versions
print("Python version:", sys.version)
print("PyGMT version:", pygmt.__version__)
print("Pandas version:", pd.__version__)
print("NumPy version:", np.__version__)
print("SciPy version:", np.__version__)
print("Xarray version:", xr.__version__)
Python version: 3.11.13 | packaged by conda-forge | (main, Jun 4 2025, 14:39:58) [MSC v.1943 64 bit (AMD64)] PyGMT version: v0.17.0 Pandas version: 2.3.3 NumPy version: 2.3.3 SciPy version: 2.3.3 Xarray version: 2025.10.1
In [2]:
# Define region of map and create grid
region=[-65, -30, 45, 60] #Approximate coordinates of Sinus Roris region
moon_grid = pygmt.datasets.load_moon_relief(resolution='02m', region=region, registration=None) #Load moon elevation data
In [3]:
# FIRST FIGURE: Topographic map
fig = pygmt.Figure()
# Create hillshade effect
shade = pygmt.grdgradient(grid=moon_grid, azimuth="0/0", normalize="t1")
# Plot grid
fig.grdimage(
grid=moon_grid,
shading=shade,
region=region,
projection="L-47.5/52.5/45/60/12c",
frame=["a", "+tSinus Roris Region (Moon)"],
cmap="rainbow",
)
# Add star in proposed location of Port Roris
fig.plot(
x=-48.604,
y=48.329,
style="a0.3c", # star of radius 0.2 cm
fill="red",
pen="black" # black outline for visibility
)
# Add text label next to the dot
fig.text(
x=-48.604 - 2.25, # slightly to the right of Port Roris
y=48.329 + 0.05, # slightly above Port Roris
text="Port Roris",
font="6p,Helvetica-Bold,black"
)
#Add map scale
fig.basemap(
map_scale="jBL+w500k+o0.5c/1c+f+l"
)
# Add colorbar
fig.colorbar(frame=["x+lElevation (m)"], position="JMR+o1c/0c+w8c")
fig.shift_origin(xshift="16c")
# SECOND FIGURE: Local Flatness
moon_grid_array = moon_grid.values # Convert xarray DataArray to NumPy array
# Define function to calculate standard deviation within a surrounding window of pixels
def local_std(window):
return np.std(window)
# #Define window size and perform standard deviation calcuation
window_size = 10
std_grid = generic_filter(moon_grid_array, local_std, size=window_size)
#Convery NumPy array back to an Xarray DataArray
std_da = xr.DataArray(
std_grid,
coords={"lat": moon_grid.lat, "lon": moon_grid.lon},
dims=["lat", "lon"]
)
# Plot grid
fig.grdimage(
grid=std_da,
region=region,
projection="L-47.5/52.5/45/60/12c",
frame=["a", "+tLocal Flatness"],
cmap="rainbow",
)
# Add colorbar
fig.colorbar(frame=[f"x+lLocal @~s@~ of elevation ({window_size} px window)"], position="JMR+o1c/0c+w8c")
# Show and save figure
#fig.show()
#fig.savefig("a_fall_of_moondust.jpg")
In [ ]: