Any function to download data and plot time series on graph

 Hi All, I am working on surface albedo data. Is there any function using which I can download the data as well as extract a time series and plot the graph. 

Thank you


Hi, Have you seen the examples in the Toolbox gallery? e.g.

https://cds.climate.copernicus.eu/toolbox/doc/gallery/3_extract_time_series_and_plot_graph.html

Thanks,

Kevin

Hi Kevin Marsh 

 Yes I tried the one that you shared but I am getting the following error. Could you please help in resolving it. 
Also, I wish to know if I want to download the data instead of getting figure as an output, should I put the command 'return data' in The end?


Traceback (most recent call last): File "/opt/cdstoolbox/cdscompute/cdscompute/cdshandlers/services/handler.py", line 59, in handle_request result
= cached(context.method, proc, context, context.args, context.kwargs) File "/opt/cdstoolbox/cdscompute/cdscompute/caching.py", line 108, in cached
result = proc(context, *context.args, **context.kwargs) File "/opt/cdstoolbox/cdscompute/cdscompute/services.py", line 124, in __call__ return p
(*args, **kwargs) File "/opt/cdstoolbox/cdscompute/cdscompute/services.py", line 60, in __call__ return self.proc(context, *args, **kwargs) File
"/home/cds/cdsservices/services/retrieve.py", line 200, in execute **retrieve_kwargs File "/opt/cdstoolbox/cdscompute/cdscompute/context.py",
line 301, in call return c.call(service, *args, **kwargs).value File "/opt/cdstoolbox/cdsworkflows/cdsworkflows/future.py", line 76, in value
raise self._result cdsworkflows.error.ClientError: None

Hi, The workflow is working for me 

and to download the data you would add @ct.output.download() at the start and return 'data_daily' along with the figure:


import cdstoolbox as ct

# Defining an application layout with 3 input collumns locate above the outputs.
layout = {
    'input_ncols': 3,
    'output_align': 'bottom'
}

# Dictionary of selectable variables
variables = {
    'Near-Surface Air Temperature': '2m_temperature',
    'Eastward Near-Surface Wind': '10m_u_component_of_wind',
    'Northward Near-Surface Wind': '10m_v_component_of_wind',
    'Sea Level Pressure': 'mean_sea_level_pressure',
    'Sea Surface Temperature': 'sea_surface_temperature',
}

# Define the main application function
@ct.application(
    title='Extract a time series and plot graph',
    layout=layout,
    description='Plot the the time series of a user selected variable at a user selected location.'
)
@ct.input.dropdown('var', label='Variable', values=variables.keys(), description='Sample variables')
@ct.input.text('lon', label='Longitude', type=float, default=75., description='Decimal degrees')
@ct.input.text('lat', label='Latitude', type=float, default=43., description='Decimal degrees')
@ct.output.livefigure()

@ct.output.download()


def plot_time_series(var, lon, lat):
    """
    Application main steps:

    - set the application layout with 3 columns for the input and output at the bottom
    - retrieve a variable over a defined time range
    - select a location, defined by longitude and latitude coordinates
    - compute the daily average
    - show the result as a timeseries on an interactive chart

    """

    # Retrieve the selected variable for a predefined time range at a spatial resolution of 3' x 3'.
    data = ct.catalogue.retrieve(
        'reanalysis-era5-single-levels',
        {
            'variable': variables[var],
            'grid': ['3', '3'],
            'product_type': 'reanalysis',
            'year': [
                '2008', '2009', '2010',
                '2011', '2012', '2013',
                '2014', '2015', '2016',
                '2017'
            ],
            'month': [
                '01', '02', '03', '04', '05', '06',
                '07', '08', '09', '10', '11', '12'
            ],
            'day': [
                '01', '02', '03', '04', '05', '06',
                '07', '08', '09', '10', '11', '12',
                '13', '14', '15', '16', '17', '18',
                '19', '20', '21', '22', '23', '24',
                '25', '26', '27', '28', '29', '30',
                '31'
            ],
            'time': ['00:00', '06:00', '12:00', '18:00'],
        }
    )

    # Location selection

    # Extract the closest point to selected lon/lat (no interpolation).
    # If wrong number is set for latitude, the closest available one is chosen:
    # e.g. if lat = 4000 -> lat = 90.
    # If wrong number is set for longitude, first a wrap in [-180, 180] is made,
    # then the closest one present is chosen:
    # e.g. if lon = 200 -> lat = -160.
    data_sel = ct.geo.extract_point(data, lon=lon, lat=lat)

    # Daily mean on selection
    data_daily = ct.climate.daily_mean(data_sel)

    # Plot the daily data
    fig = ct.chart.line(data_daily)

    return fig, data_daily