Convert to RGB format (vector data)

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


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


Define the working directories:

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

# Logging
start_time =

Loading wind data

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

# Reading the wind data
ds = xr.open_dataset(

# 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

initialising_time =

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(
    dims=['y', 'x', 'wind'],
        'wind': ['u', 'v'],
        'y': y,
        'x': x
        'y_step': y_step,
        'x_step': x_step

preparation_time =

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 =


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

# preview
with as image:

visualise_time =
rgb wind

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}")
Start time: 2022-10-14 03:01:14.392311
Initialising time: 2022-10-14 03:01:14.911578
Preparation time: 2022-10-14 03:01:14.915775
Convertion time: 2022-10-14 03:01:14.953335
Visualise time: 2022-10-14 03:01:15.192408
Time to initialise: 0 days 00:00:00.519267
Time to prepare information: 0 days 00:00:00.004197
Time to convertion: 0 days 00:00:00.037560
Time to visualise: 0 days 00:00:00.239073
Total: 0 days 00:00:00.800097

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

Gallery generated by Sphinx-Gallery