Convert to RGB format (vector data)

This example demonstrates convertion from wind data to uv rgb format (with HKO earth format).

Definitions

Import all required modules and methods:

# Python package to allow system command line functions
import os
# Python package to manage warning message
import warnings
# Python package for time calculations
import pandas as pd
# Python package for numerical calculations
import numpy as np
# Python package for xarrays to read and handle netcdf data
import xarray as xr
# Python package for image generation
from PIL import Image
# Python package for image preview
import matplotlib.pyplot as plt

# swirlspy data convertion function
from swirlspy.utils.conversion import to_rgb_data, to_hko_earth_format
# directory constants
from swirlspy.tests.samples import DATA_DIR
from swirlspy.tests.outputs import OUTPUT_DIR

warnings.filterwarnings("ignore")

Define the working directories:

data_dir = os.path.join(DATA_DIR, 'gts')

# Logging
start_time = pd.Timestamp.now()

Loading wind data

# Specify the basetime
basetime = pd.Timestamp('202107180000')

# Reading the wind data
ds = xr.open_dataset(
    os.path.join(
        data_dir,
        f"romas_plv_{basetime.strftime('%Y%m%d%H%M')}.nc"
    )
)

# pick pressure level, e.g. 200 in this case
ds_200 = ds.sel(isobaricInhPa=200)
u = ds_200['u'].data
v = ds_200['v'].data
y = ds['latitude'].data
x = ds['longitude'].data

# Close dataset
ds.close()

initialising_time = pd.Timestamp.now()

Extract all necessary values for rgb image

# prepare placeholder for necessary values
d = np.empty((len(y), len(x), 2))

d[:] = 0
d[:, :, 0] = u
d[:, :, 1] = v

# calculate x, y step size
y_step = (y[-1] - y[0]) / len(y)
x_step = (x[-1] - x[0]) / len(x)

# build image data
data = xr.DataArray(
    d,
    dims=['y', 'x', 'wind'],
    coords={
        'wind': ['u', 'v'],
        'y': y,
        'x': x
    },
    attrs={
        'y_step': y_step,
        'x_step': x_step
    }
)

preparation_time = pd.Timestamp.now()

Convert image data into rgb format

# this step is not necessary, depends on any meta data and preprocess is required by your platform
earth_data = to_hko_earth_format(data, coords_dp=3, values_dp=0, uv_mode=True, y_step=y_step, x_step=x_step)
rgb = to_rgb_data(earth_data, uv_mode=True)

convertion_time = pd.Timestamp.now()

Visualisation

path = os.path.join(OUTPUT_DIR, "rgb_wind.png")
with Image.fromarray(rgb, 'RGBA') as img:
    img.save(path, 'png')

# preview
with Image.open(path) as image:
    plt.axis('off')
    plt.imshow(image)
    plt.plot()
    plt.show()

visualise_time = pd.Timestamp.now()
../_images/sphx_glr_rgb_wind_001.png

Checking run time of each component

print(f"Start time: {start_time}")
print(f"Initialising time: {initialising_time}")
print(f"Preparation time: {preparation_time}")
print(f"Convertion time: {convertion_time}")
print(f"Visualise time: {visualise_time}")

print(f"Time to initialise: {initialising_time - start_time}")
print(f"Time to prepare information: {preparation_time - initialising_time}")
print(f"Time to convertion: {convertion_time - preparation_time}")
print(f"Time to visualise: {visualise_time - convertion_time}")

print(f"Total: {visualise_time - start_time}")

Out:

Start time: 2021-11-29 08:54:13.142932
Initialising time: 2021-11-29 08:54:13.513915
Preparation time: 2021-11-29 08:54:13.517012
Convertion time: 2021-11-29 08:54:13.554546
Visualise time: 2021-11-29 08:54:13.775008
Time to initialise: 0 days 00:00:00.370983
Time to prepare information: 0 days 00:00:00.003097
Time to convertion: 0 days 00:00:00.037534
Time to visualise: 0 days 00:00:00.220462
Total: 0 days 00:00:00.632076

Total running time of the script: ( 0 minutes 0.631 seconds)

Gallery generated by Sphinx-Gallery