Nose Boom Measurements#

During ACLOUD, AFLUX, and MOSAiC-ACA campaigns meteorological data (temperature, 3 wind components, air pressure) have been measured in high temporal resolution (100 Hz) using instrumentation that was installed at the nose booms of both aircraft Polar 5 and Polar 6.

For each flight the data are given as functions of time and position (including height above ground) along the flight tracks. All flights started and ended in Longyearbyen, Svalbard. Each file represents an entire flight starting well before the first movement of the plane and ending after the final parking position has been reached after landing.

The wind measurement is only valid during flight and the full accuracy is only achieved during straight level flight sections. The absolute accuracy of the wind components is 0.2 m s\(^{-1}\) for straight and level flights sections and the relative accuracy of the vertical wind speed is about 0.05 m s\(^{-1}\) for straight and level flight sections. For these sections, which can be obtained on the basis of the given roll and pitch angles of the aircraft, the 100 Hz data can be used to derive turbulent fluxes of momentum and sensible heat.

For further informations on the data processing and accuracy of the turbulence measurement refer to Hartmann et al. (2018). For further information on the ACLOUD campaign we refer to Wendisch et al. (2018) and for AFLUX and MOSAiC-ACA check Mech et al. (2022).

More information about the data set can be found in Hartmann et al. (2019)

Variables in the data set and their meaning#

All data are given as decimal values at 100Hz in columns in this order and meaning:

variable

meaning

t

UTC-time in seconds (since midnight)

lon

longitude in degress based on WGS84

lat

latitude in degress based on WGS84

h

height in metres based on WGS84

p

static pressure in hpa, corrected for the influence of the aircraft

T

temperature from PT100, corrected for adiabatic heating

u

west-east component of wind speed in m/s, positive towards east

v

south-north component of wind speed in m/s, positive towards north

w

vertical wind speed in m/s

pitch

pitch angle in degrees

roll

roll angle in degrees

thdg

true heading of the aircraft in degrees

Data access#

  • To analyse the data they first have to be loaded by importing the (AC)³airborne meta data catalogue. To do so the ac3airborne package has to be installed. More information on how to do that and about the catalog can be found here.

import os
from dotenv import load_dotenv

load_dotenv()

# local caching
kwds = {'simplecache': dict(
    cache_storage=os.environ['INTAKE_CACHE'], 
    same_names=True
)}

Get data#

import ac3airborne as ac3a

We first want to list the available research flights for the polar 5:

cat = ac3a.get_intake_catalog()

datasets_p5 = []
for campaign in ['ACLOUD','AFLUX','MOSAiC-ACA']:
    datasets_p5.extend(list(cat[campaign]['P5']['NOSE_BOOM']))
datasets_p5
['ACLOUD_P5_RF04',
 'ACLOUD_P5_RF05',
 'ACLOUD_P5_RF06',
 'ACLOUD_P5_RF07',
 'ACLOUD_P5_RF08',
 'ACLOUD_P5_RF10',
 'ACLOUD_P5_RF11',
 'ACLOUD_P5_RF13',
 'ACLOUD_P5_RF14',
 'ACLOUD_P5_RF15',
 'ACLOUD_P5_RF16',
 'ACLOUD_P5_RF17',
 'ACLOUD_P5_RF18',
 'ACLOUD_P5_RF19',
 'ACLOUD_P5_RF20',
 'ACLOUD_P5_RF21',
 'ACLOUD_P5_RF22',
 'ACLOUD_P5_RF23',
 'ACLOUD_P5_RF25',
 'AFLUX_P5_RF02',
 'AFLUX_P5_RF03',
 'AFLUX_P5_RF04',
 'AFLUX_P5_RF05',
 'AFLUX_P5_RF06',
 'AFLUX_P5_RF07',
 'AFLUX_P5_RF08',
 'AFLUX_P5_RF09',
 'AFLUX_P5_RF10',
 'AFLUX_P5_RF12',
 'AFLUX_P5_RF13',
 'AFLUX_P5_RF14',
 'AFLUX_P5_RF15',
 'MOSAiC-ACA_P5_RF01',
 'MOSAiC-ACA_P5_RF02',
 'MOSAiC-ACA_P5_RF03',
 'MOSAiC-ACA_P5_RF04',
 'MOSAiC-ACA_P5_RF05',
 'MOSAiC-ACA_P5_RF06',
 'MOSAiC-ACA_P5_RF07',
 'MOSAiC-ACA_P5_RF08',
 'MOSAiC-ACA_P5_RF09',
 'MOSAiC-ACA_P5_RF10',
 'MOSAiC-ACA_P5_RF11']

and for the polar 6:

datasets_p6 = []
for campaign in ['ACLOUD']:
    datasets_p6.extend(list(cat[campaign]['P6']['NOSE_BOOM']))
datasets_p6
['ACLOUD_P6_RF07',
 'ACLOUD_P6_RF08',
 'ACLOUD_P6_RF09',
 'ACLOUD_P6_RF10',
 'ACLOUD_P6_RF11',
 'ACLOUD_P6_RF12',
 'ACLOUD_P6_RF13',
 'ACLOUD_P6_RF14',
 'ACLOUD_P6_RF15',
 'ACLOUD_P6_RF16',
 'ACLOUD_P6_RF17',
 'ACLOUD_P6_RF18',
 'ACLOUD_P6_RF19',
 'ACLOUD_P6_RF20',
 'ACLOUD_P6_RF21',
 'ACLOUD_P6_RF22',
 'ACLOUD_P6_RF23',
 'ACLOUD_P6_RF24',
 'ACLOUD_P6_RF25']

Note

The nose boom data files on PANGEA are given as gzipped ASCII files and not as NetCDF. The function get_intake_catalog uses in background the pandas function read_csv. Some of the following steps are therefore different than for other available datasets in ac3airborne.

We want to show an example of a joint flight of the polar 5 and polar 6, so we import the nose boom measurements of both aircrafts:

ds_p5 = cat['ACLOUD']['P5']['NOSE_BOOM']['ACLOUD_P5_RF07'](storage_options=kwds).read()
ds_p5
/net/sever/mech/miniconda3/envs/howtoac3/lib/python3.11/site-packages/dask/dataframe/io/csv.py:508: UserWarning: Warning gzip compression does not support breaking apart files
Please ensure that each individual file can fit in memory and
use the keyword ``blocksize=None to remove this message``
Setting ``blocksize=None``
  warn(
t h lon lat p gs pitch roll rh T u v tas
0 46817 24 15.50397 78.24574 1018.1 0.02 11.54 1.52 49.34 -2.60 10.05 -2.28 10.30
1 46818 24 15.50397 78.24574 1018.2 0.02 11.53 1.52 49.32 -2.60 10.10 -2.30 10.45
2 46819 24 15.50397 78.24574 1018.1 0.02 11.54 1.52 49.29 -2.60 10.09 -2.29 10.48
3 46820 24 15.50397 78.24574 1018.3 0.02 11.53 1.52 49.16 -2.58 10.07 -2.29 10.65
4 46821 24 15.50397 78.24574 1018.1 0.01 11.53 1.52 49.18 -2.56 10.10 -2.30 10.56
... ... ... ... ... ... ... ... ... ... ... ... ... ...
12505 59322 25 15.50417 78.24573 1018.0 0.01 11.90 1.71 49.38 -2.61 9.11 -2.98 9.63
12506 59323 25 15.50416 78.24573 1018.0 0.01 11.90 1.71 49.46 -2.59 9.08 -2.97 9.82
12507 59324 25 15.50416 78.24573 1018.0 0.01 11.90 1.71 49.43 -2.62 9.10 -2.98 9.53
12508 59325 25 15.50417 78.24573 1018.0 0.02 11.90 1.71 49.44 -2.59 9.09 -2.98 9.74
12509 59326 25 15.50417 78.24573 1017.9 0.02 11.90 1.71 49.48 -2.60 9.10 -2.98 9.88

12510 rows × 13 columns

The same for the polar 6:

ds_p6 = cat['ACLOUD']['P6']['NOSE_BOOM']['ACLOUD_P6_RF07'](storage_options=kwds).read()
ds_p6
t h lon lat p gs pitch roll rh T u v tas
0 46732 24 15.50207 78.24593 1018.4 0.06 12.00 1.04 48.80 -2.17 0.12 -0.09 0.00
1 46733 24 15.50207 78.24593 1018.4 0.12 11.97 1.03 49.08 -2.28 0.05 -0.06 0.00
2 46734 24 15.50206 78.24593 1018.4 0.15 11.92 1.01 49.37 -2.26 0.31 -0.11 1.38
3 46735 25 15.50205 78.24593 1018.4 0.30 11.94 1.00 49.11 -2.30 0.12 0.02 0.65
4 46736 25 15.50205 78.24593 1018.4 0.23 11.82 0.91 49.00 -2.21 -0.03 -0.00 0.00
... ... ... ... ... ... ... ... ... ... ... ... ... ...
12823 59555 27 15.50163 78.24588 1017.2 0.02 12.06 0.60 46.52 -3.24 -0.00 0.00 0.00
12824 59556 27 15.50163 78.24588 1017.2 0.02 12.06 0.61 46.64 -3.24 -0.00 -0.00 0.00
12825 59557 27 15.50163 78.24588 1017.2 0.02 12.06 0.60 46.53 -3.24 -0.00 -0.00 0.00
12826 59558 27 15.50163 78.24588 1017.1 0.02 12.06 0.61 46.45 -3.23 -0.01 -0.00 0.00
12827 59559 27 15.50164 78.24588 1017.1 0.02 12.06 0.60 46.45 -3.23 -0.01 -0.00 0.00

12828 rows × 13 columns

Make some optional changes on the data set#

You may want to change the time to another format such as datetime, since it is given as UTC-time in seconds (since midnight). You may also want to change the index of the pandas Dataframe to be the time itself instead of the row number. Another things you may want to do is to convert the data to an xarray dataset.

Change the time format#

The time is given as UTC-time in seconds (since midnight). So we first need to find out the date of the joint research flight:

meta = ac3a.get_flight_segments()
date = meta['ACLOUD']['P5']['ACLOUD_P5_RF07']['date']
date
datetime.date(2017, 5, 27)

Which is obviously the same for the polar 6:

date = meta['ACLOUD']['P6']['ACLOUD_P6_RF07']['date']
date
datetime.date(2017, 5, 27)

After that we convert the time in seconds from the midnight to datetime:

import pandas as pd

ds_p5['t'] = pd.to_datetime(ds_p5['t'], unit='s', origin=date)
ds_p5
t h lon lat p gs pitch roll rh T u v tas
0 2017-05-27 13:00:17 24 15.50397 78.24574 1018.1 0.02 11.54 1.52 49.34 -2.60 10.05 -2.28 10.30
1 2017-05-27 13:00:18 24 15.50397 78.24574 1018.2 0.02 11.53 1.52 49.32 -2.60 10.10 -2.30 10.45
2 2017-05-27 13:00:19 24 15.50397 78.24574 1018.1 0.02 11.54 1.52 49.29 -2.60 10.09 -2.29 10.48
3 2017-05-27 13:00:20 24 15.50397 78.24574 1018.3 0.02 11.53 1.52 49.16 -2.58 10.07 -2.29 10.65
4 2017-05-27 13:00:21 24 15.50397 78.24574 1018.1 0.01 11.53 1.52 49.18 -2.56 10.10 -2.30 10.56
... ... ... ... ... ... ... ... ... ... ... ... ... ...
12505 2017-05-27 16:28:42 25 15.50417 78.24573 1018.0 0.01 11.90 1.71 49.38 -2.61 9.11 -2.98 9.63
12506 2017-05-27 16:28:43 25 15.50416 78.24573 1018.0 0.01 11.90 1.71 49.46 -2.59 9.08 -2.97 9.82
12507 2017-05-27 16:28:44 25 15.50416 78.24573 1018.0 0.01 11.90 1.71 49.43 -2.62 9.10 -2.98 9.53
12508 2017-05-27 16:28:45 25 15.50417 78.24573 1018.0 0.02 11.90 1.71 49.44 -2.59 9.09 -2.98 9.74
12509 2017-05-27 16:28:46 25 15.50417 78.24573 1017.9 0.02 11.90 1.71 49.48 -2.60 9.10 -2.98 9.88

12510 rows × 13 columns

The same for the polar 6:

ds_p6['t'] = pd.to_datetime(ds_p6['t'], unit='s', origin=date)

Change the index of the pandas DataFrame to be the time#

The time is not given as the index of the table by default:

ds_p5 = ds_p5.set_index('t')
ds_p5
h lon lat p gs pitch roll rh T u v tas
t
2017-05-27 13:00:17 24 15.50397 78.24574 1018.1 0.02 11.54 1.52 49.34 -2.60 10.05 -2.28 10.30
2017-05-27 13:00:18 24 15.50397 78.24574 1018.2 0.02 11.53 1.52 49.32 -2.60 10.10 -2.30 10.45
2017-05-27 13:00:19 24 15.50397 78.24574 1018.1 0.02 11.54 1.52 49.29 -2.60 10.09 -2.29 10.48
2017-05-27 13:00:20 24 15.50397 78.24574 1018.3 0.02 11.53 1.52 49.16 -2.58 10.07 -2.29 10.65
2017-05-27 13:00:21 24 15.50397 78.24574 1018.1 0.01 11.53 1.52 49.18 -2.56 10.10 -2.30 10.56
... ... ... ... ... ... ... ... ... ... ... ... ...
2017-05-27 16:28:42 25 15.50417 78.24573 1018.0 0.01 11.90 1.71 49.38 -2.61 9.11 -2.98 9.63
2017-05-27 16:28:43 25 15.50416 78.24573 1018.0 0.01 11.90 1.71 49.46 -2.59 9.08 -2.97 9.82
2017-05-27 16:28:44 25 15.50416 78.24573 1018.0 0.01 11.90 1.71 49.43 -2.62 9.10 -2.98 9.53
2017-05-27 16:28:45 25 15.50417 78.24573 1018.0 0.02 11.90 1.71 49.44 -2.59 9.09 -2.98 9.74
2017-05-27 16:28:46 25 15.50417 78.24573 1017.9 0.02 11.90 1.71 49.48 -2.60 9.10 -2.98 9.88

12510 rows × 12 columns

The same for the polar 6:

ds_p6 = ds_p6.set_index('t')

Convert the data to xarray#

If you want the date to be an xarray do so:

ds_p5 = ds_p5.to_xarray()
ds_p5
<xarray.Dataset> Size: 1MB
Dimensions:  (t: 12510)
Coordinates:
  * t        (t) datetime64[ns] 100kB 2017-05-27T13:00:17 ... 2017-05-27T16:2...
Data variables:
    h        (t) int64 100kB 24 24 24 24 24 24 24 24 ... 25 25 25 25 25 25 25 25
    lon      (t) float64 100kB 15.5 15.5 15.5 15.5 15.5 ... 15.5 15.5 15.5 15.5
    lat      (t) float64 100kB 78.25 78.25 78.25 78.25 ... 78.25 78.25 78.25
    p        (t) float64 100kB 1.018e+03 1.018e+03 ... 1.018e+03 1.018e+03
    gs       (t) float64 100kB 0.02 0.02 0.02 0.02 0.01 ... 0.01 0.01 0.02 0.02
    pitch    (t) float64 100kB 11.54 11.53 11.54 11.53 ... 11.9 11.9 11.9 11.9
    roll     (t) float64 100kB 1.52 1.52 1.52 1.52 1.52 ... 1.71 1.71 1.71 1.71
    rh       (t) float64 100kB 49.34 49.32 49.29 49.16 ... 49.43 49.44 49.48
    T        (t) float64 100kB -2.6 -2.6 -2.6 -2.58 ... -2.59 -2.62 -2.59 -2.6
    u        (t) float64 100kB 10.05 10.1 10.09 10.07 10.1 ... 9.08 9.1 9.09 9.1
    v        (t) float64 100kB -2.28 -2.3 -2.29 -2.29 ... -2.98 -2.98 -2.98
    tas      (t) float64 100kB 10.3 10.45 10.48 10.65 ... 9.82 9.53 9.74 9.88

The same for the polar 6:

ds_p6 = ds_p6.to_xarray()

Example: ACLOUD Joint flight P5 and P6 on 27-05-2017#

First, the entire two flights are plotted on a geographic map:

import warnings
warnings.filterwarnings('ignore')

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
plt.style.use("../../mplstyle/book")
proj = ccrs.NorthPolarStereo()
extent = (-5.0, 20.0, 78.0, 80.0)

fig = plt.figure(figsize=(8, 8))
ax = plt.axes(projection=proj)
ax.set_extent(extent)

ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.LAND)
ax.gridlines()
ax.coastlines()

nya_lat = 78.924444
nya_lon = 11.928611

ax.plot(nya_lon, nya_lat, 'ro', transform=ccrs.PlateCarree())
ax.text(nya_lon, nya_lat+0.05, 'Ny-Ålesund', transform=ccrs.PlateCarree())

# the nose boom coordinates have resolution of 0.01 s
# so we take only every 1000 value (10 s) in order to make this plot faster

ax.plot(ds_p5.lon[::1000], ds_p5.lat[::1000], label='Polar 5', transform=ccrs.PlateCarree())
ax.plot(ds_p6.lon[::1000], ds_p6.lat[::1000], label='Polar 6', transform=ccrs.PlateCarree())

ax.legend()

plt.show()
../../_images/e93099933430cd2f111bd9f9fc2cb1fac9a4904f098d039069a6526488a0dc7a.png

Second we want to look closer at the height and position of the aircrafts in time:

fig, ax = plt.subplots(5, 1, figsize=(9, 10), sharex=True)

ax[0].plot(ds_p5.t, ds_p5['lon'], label='Polar 5')
ax[0].plot(ds_p6.t, ds_p6['lon'], label='Polar 6')

ax[0].set_ylabel('Longitude [°E]')
ax[0].legend()

ax[1].plot(ds_p5.t, ds_p5['lat'], label='Polar 5')
ax[1].plot(ds_p6.t, ds_p6['lat'], label='Polar 6')

ax[1].set_ylabel('Latitude [°N]')
ax[1].legend()

ax[2].plot(ds_p5.t, ds_p5['h'], label='Polar 5')
ax[2].plot(ds_p6.t, ds_p6['h'], label='Polar 6')

ax[2].set_ylabel('Height [m]')
ax[2].legend()

ax[3].plot(ds_p5.t, ds_p5['pitch'], label='Polar 5')
ax[3].plot(ds_p6.t, ds_p6['pitch'], label='Polar 6')

ax[3].set_ylabel('Pitch [°]')
ax[3].legend()

ax[4].plot(ds_p5.t, ds_p5['roll'], label='Polar 5')
ax[4].plot(ds_p6.t, ds_p6['roll'], label='Polar 6')

ax[4].set_ylabel('Roll [°]')
ax[4].legend()

fig.suptitle('Joint flight P5 and P6', fontsize=16)
Text(0.5, 0.98, 'Joint flight P5 and P6')
../../_images/99aff6f1298ea470b094eb01c38304f19adaf822527f47a11594e3c891242518.png

After having zoomed into the picture (or after having found a suitable segment with the flightphase-tools, see “Toolbox and examples”), we can select a particular segment of the flight and compare temperature, pressure and wind, for example, along a straight line at two constant levels:

from datetime import datetime

start = '2017-05-27 14:35:00'
end   = '2017-05-27 14:50:00'

starttime = datetime.strptime(start, '%Y-%m-%d %H:%M:%S')
endtime   = datetime.strptime(end, '%Y-%m-%d %H:%M:%S')

First we plot again the flights on the map, but only in the selected time range:

proj = ccrs.NorthPolarStereo()
extent = (-5.0, 20.0, 78.0, 80.0)

fig = plt.figure(figsize=(8, 8))
ax = plt.axes(projection=proj)
ax.set_extent(extent)

ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.LAND)
ax.gridlines()
ax.coastlines()

nya_lat = 78.924444
nya_lon = 11.928611

ax.plot(nya_lon, nya_lat, 'ro', transform=ccrs.PlateCarree())
ax.text(nya_lon, nya_lat+0.05, 'Ny-Ålesund', transform=ccrs.PlateCarree())

# the nose boom coordinates have resolution of 0.01 s
# so we take only every 1000 value (10 s) in order to make this plot faster

ax.plot(ds_p5.lon.sel(t=slice(starttime, endtime)), ds_p5.lat.sel(t=slice(starttime, endtime)), label='Polar 5', transform=ccrs.PlateCarree())
ax.plot(ds_p6.lon.sel(t=slice(starttime, endtime)), ds_p6.lat.sel(t=slice(starttime, endtime)), label='Polar 6', transform=ccrs.PlateCarree())

ax.legend()

plt.show()
../../_images/1a22583280a92866e6e7233465e0bf2b9c7c1ce1c7619f4823ce459296cbcf2f.png

The same for position height, pitch, roll and heading:

fig, ax = plt.subplots(5, 1, figsize=(9, 10), sharex=True)

ax[0].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['lon'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[0].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['lon'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[0].set_ylabel('Longitude [°E]')
ax[0].legend()

ax[1].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['lat'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[1].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['lat'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[1].set_ylabel('Latitude [°N]')
ax[1].legend()

ax[2].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['h'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[2].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['h'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[2].set_ylabel('Height [m]')
ax[2].legend()

ax[3].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['pitch'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[3].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['pitch'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[3].set_ylabel('Pitch [°]')
ax[3].legend()

ax[4].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['roll'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[4].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['roll'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[4].set_ylabel('Roll [°]')
ax[4].legend()

fig.suptitle('Joint flight P5 and P6', fontsize=16)
Text(0.5, 0.98, 'Joint flight P5 and P6')
../../_images/3137dc429f8584d69417e07f6f2617d5a73f6c1676cd823b9d26ce5ea58daac8.png

And now we look at the data for pressure, wind and the three wind components:

fig, ax = plt.subplots(4, 1, figsize=(9, 10), sharex=True)

ax[0].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['p'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[0].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['p'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[0].set_ylabel('Pressure [hPa]')
ax[0].legend()

ax[1].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['T'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[1].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['T'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[1].set_ylabel('Temperature [K]')
ax[1].legend()

ax[2].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['u'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[2].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['u'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[2].set_ylabel('u-Wind [m/s]')
ax[2].legend()

ax[3].plot(ds_p5.t.sel(t=slice(starttime, endtime)), ds_p5['v'].sel(t=slice(starttime, endtime)), label='Polar 5')
ax[3].plot(ds_p6.t.sel(t=slice(starttime, endtime)), ds_p6['v'].sel(t=slice(starttime, endtime)), label='Polar 6')

ax[3].set_ylabel('v-Wind [m/s]')
ax[3].legend()

ax[3].set_xlabel('Time')

fig.suptitle('Joint flight P5 and P6', fontsize=16)
Text(0.5, 0.98, 'Joint flight P5 and P6')
../../_images/ec87851303fbbdbd7932b9b2b9956ab10fe68dec00ab09489a5bd405be46b0ab.png