|
import streamlit as st |
|
import pandas as pd |
|
from pyecharts import options as opts |
|
from pyecharts.charts import Bar, Line |
|
from pyecharts.commons.utils import JsCode |
|
import numpy as np |
|
from cpc_iri_web import modelos_dinamicos, modelos_estatisticos, df_table |
|
|
|
|
|
def plot_oni(): |
|
|
|
df = pd.read_table('https://origin.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/detrend.nino34.ascii.txt', delim_whitespace=True) |
|
|
|
data_inicial = str(df['MON'].values[0]) + '/' + str(df['YR'].values[0]) |
|
data_final = str(df['MON'].values[-1]) + '/' + str(df['YR'].values[-1]) |
|
daterange = pd.date_range(*(pd.to_datetime([data_inicial, data_final], format='%m/%Y') + pd.offsets.MonthEnd()), freq='M') |
|
index = daterange.strftime('%b/%Y').tolist() |
|
data = df['ANOM'].values.tolist() |
|
|
|
color_function = """ |
|
function (params) { |
|
if (params.value > 0) { |
|
return 'red'; |
|
} else { |
|
return 'blue'; |
|
} |
|
} |
|
""" |
|
|
|
oni_plot = ( |
|
Bar() |
|
.add_xaxis(index) |
|
.add_yaxis("Indice ONI", data, itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function))) |
|
.set_global_opts(title_opts=opts.TitleOpts(title="Índice ONI", subtitle="Fonte: NOAA/CPC", subtitle_link='https://origin.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/ONI_v5.php'), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), |
|
legend_opts=opts.LegendOpts(is_show=False), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} °C")), |
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=len(index)), opts.DataZoomOpts(type_="inside")] |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
) |
|
|
|
return oni_plot |
|
|
|
|
|
|
|
|
|
def plot_oni_season(): |
|
|
|
df = pd.read_table('https://origin.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/detrend.nino34.ascii.txt', delim_whitespace=True) |
|
|
|
data_inicial = str(df['MON'].values[0]) + '/' + str(df['YR'].values[0]) |
|
data_final = str(df['MON'].values[-1]) + '/' + str(df['YR'].values[-1]) |
|
daterange = pd.date_range(*(pd.to_datetime([data_inicial, data_final], format='%m/%Y') + pd.offsets.MonthEnd()), freq='M') |
|
index = daterange.strftime('%b/%Y').tolist() |
|
data = df['ANOM'].values.tolist() |
|
|
|
dff = df.copy() |
|
dff.index = index |
|
dff_resample = dff['ANOM'].rolling(3).mean().dropna() |
|
|
|
new_index = [] |
|
for i in range(len(index)): |
|
if i+2 < len(index) and i+1 < len(index): |
|
new_index.append(index[i][0] + index[i+1][0] + index[i+2][0] + index[i+2][3:]) |
|
dff_resample.index = new_index |
|
|
|
data = dff_resample.round(2).values.tolist() |
|
|
|
color_function = """ |
|
function (params) { |
|
if (params.value > 0) { |
|
return 'red'; |
|
} else { |
|
return 'blue'; |
|
} |
|
} |
|
""" |
|
|
|
oni_plot = ( |
|
Bar() |
|
.add_xaxis(new_index) |
|
.add_yaxis("Indice ONI", data, itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function))) |
|
.set_global_opts(title_opts=opts.TitleOpts(title="Índice ONI", subtitle="Fonte: NOAA/CPC", subtitle_link='https://origin.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/ONI_v5.php'), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), |
|
legend_opts=opts.LegendOpts(is_show=False), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} °C")), |
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=len(index)), opts.DataZoomOpts(type_="inside")] |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
) |
|
|
|
return oni_plot |
|
|
|
|
|
|
|
|
|
def plot_sst_indexes(nino): |
|
|
|
df = pd.read_table('https://www.cpc.ncep.noaa.gov/data/indices/sstoi.indices', delim_whitespace=True) |
|
data_inicial = str(df['MON'].values[0]) + '/' + str(df['YR'].values[0]) |
|
data_final = str(df['MON'].values[-1]) + '/' + str(df['YR'].values[-1]) |
|
daterange = pd.date_range(*(pd.to_datetime([data_inicial, data_final], format='%m/%Y') + pd.offsets.MonthEnd()), freq='M') |
|
index = daterange.strftime('%b/%Y').tolist() |
|
|
|
if nino == 'nino12': |
|
data = df['ANOM'].values.tolist() |
|
title = 'Anomalia TSM Niño 1+2 Index' |
|
elif nino == 'nino3': |
|
data = df['ANOM.1'].values.tolist() |
|
title = 'Anomalia TSM Niño 3 Index' |
|
elif nino == 'nino34': |
|
data = df['ANOM.2'].values.tolist() |
|
title = 'Anomalia TSM Niño 3+4 Index' |
|
elif nino == 'nino4': |
|
data = df['ANOM.3'].values.tolist() |
|
title = 'Anomalia TSM Niño 4 Index' |
|
|
|
color_function = """ |
|
function (params) { |
|
if (params.value > 0) { |
|
return 'red'; |
|
} else { |
|
return 'blue'; |
|
} |
|
} |
|
""" |
|
|
|
oni_plot = ( |
|
|
|
Bar() |
|
.add_xaxis(index) |
|
.add_yaxis("Indice SST", data, itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function))) |
|
.set_global_opts(title_opts=opts.TitleOpts(title=title, subtitle="Fonte: NCEI/NOAA", subtitle_link='https://www.ncei.noaa.gov/access/monitoring/enso/sst'), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), |
|
legend_opts=opts.LegendOpts(is_show=False), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} °C")), |
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=len(index)), opts.DataZoomOpts(type_="inside")] |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
) |
|
|
|
return oni_plot |
|
|
|
|
|
|
|
|
|
|
|
def plot_sst_indexes_season(nino): |
|
|
|
df = pd.read_table('https://www.cpc.ncep.noaa.gov/data/indices/sstoi.indices', delim_whitespace=True) |
|
data_inicial = str(df['MON'].values[0]) + '/' + str(df['YR'].values[0]) |
|
data_final = str(df['MON'].values[-1]) + '/' + str(df['YR'].values[-1]) |
|
daterange = pd.date_range(*(pd.to_datetime([data_inicial, data_final], format='%m/%Y') + pd.offsets.MonthEnd()), freq='M') |
|
index = daterange.strftime('%b/%Y').tolist() |
|
dff = df.copy() |
|
dff.index = index |
|
|
|
if nino == 'nino12': |
|
data = dff['ANOM'] |
|
title = 'Anomalia TSM Niño 1+2 Index' |
|
elif nino == 'nino3': |
|
data = dff['ANOM.1'] |
|
title = 'Anomalia TSM Niño 3 Index' |
|
elif nino == 'nino34': |
|
data = dff['ANOM.2'] |
|
title = 'Anomalia TSM Niño 3+4 Index' |
|
elif nino == 'nino4': |
|
data = dff['ANOM.3'] |
|
title = 'Anomalia TSM Niño 4 Index' |
|
|
|
dff_resample = data.rolling(3).mean().dropna() |
|
|
|
new_index = [] |
|
for i in range(len(index)): |
|
if i+2 < len(index) and i+1 < len(index): |
|
new_index.append(index[i][0] + index[i+1][0] + index[i+2][0] + index[i+2][3:]) |
|
dff_resample.index = new_index |
|
|
|
data = dff_resample.round(2).values.tolist() |
|
|
|
color_function = """ |
|
function (params) { |
|
if (params.value > 0) { |
|
return 'red'; |
|
} else { |
|
return 'blue'; |
|
} |
|
} |
|
""" |
|
|
|
oni_plot = ( |
|
|
|
Bar() |
|
.add_xaxis(new_index) |
|
.add_yaxis("Indice SST", data, itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function))) |
|
.set_global_opts(title_opts=opts.TitleOpts(title=title, subtitle="Fonte: NCEI/NOAA", subtitle_link='https://www.ncei.noaa.gov/access/monitoring/enso/sst'), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), |
|
legend_opts=opts.LegendOpts(is_show=False), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} °C")), |
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=len(index)), opts.DataZoomOpts(type_="inside")] |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
) |
|
|
|
return oni_plot |
|
|
|
|
|
|
|
|
|
def plot_soi(): |
|
|
|
soi = pd.read_table('https://www.cpc.ncep.noaa.gov/data/indices/soi', delim_whitespace=True, skiprows=87, index_col=0) |
|
soi = soi[0:72] |
|
soi.loc['2023'] = [1.4, 1.4, 0.2, 0.2, 1.0, 0.3, -0.3, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN] |
|
t = soi.loc[soi.index[0]] |
|
for h in soi.index[1:]: |
|
if h == soi.index[1]: |
|
r = pd.concat([t, soi.loc[h]]) |
|
else: |
|
r = pd.concat([r, soi.loc[h]]) |
|
df_soi = pd.DataFrame(r).astype(float) |
|
date_range2 = pd.date_range(start='1/1/1951', end='1/1/2024', freq='M') |
|
df_soi.index = date_range2 |
|
df_soi.columns = ['Índice SOI'] |
|
index = df_soi.index.strftime('%b/%Y').tolist() |
|
data = df_soi['Índice SOI'].tolist() |
|
title = 'Índice SOI' |
|
|
|
color_function = """ |
|
function (params) { |
|
if (params.value > 0) { |
|
return 'red'; |
|
} else { |
|
return 'blue'; |
|
} |
|
} |
|
""" |
|
|
|
soi_plot = ( |
|
|
|
Bar() |
|
.add_xaxis(index) |
|
.add_yaxis("Indice SOI", data, itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function))) |
|
.set_global_opts(title_opts=opts.TitleOpts(title=title, subtitle="Fonte: NCEI/NOAA", subtitle_link='https://www.ncei.noaa.gov/access/monitoring/enso/soi'), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), |
|
legend_opts=opts.LegendOpts(is_show=False), |
|
|
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=len(index)), opts.DataZoomOpts(type_="inside")] |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
) |
|
|
|
return soi_plot |
|
|
|
|
|
|
|
|
|
def plot_soi_season(): |
|
|
|
soi = pd.read_table('https://www.cpc.ncep.noaa.gov/data/indices/soi', delim_whitespace=True, skiprows=87, index_col=0) |
|
soi = soi[0:72] |
|
soi.loc['2023'] = [1.4, 1.4, 0.2, 0.2, 1.0, 0.3, -0.3, np.NaN, np.NaN, np.NaN, np.NaN, np.NaN] |
|
t = soi.loc[soi.index[0]] |
|
for h in soi.index[1:]: |
|
if h == soi.index[1]: |
|
r = pd.concat([t, soi.loc[h]]) |
|
else: |
|
r = pd.concat([r, soi.loc[h]]) |
|
df_soi = pd.DataFrame(r).astype(float) |
|
date_range2 = pd.date_range(start='1/1/1951', end='1/1/2024', freq='M') |
|
df_soi.index = date_range2 |
|
df_soi.columns = ['Índice SOI'] |
|
index = df_soi.index.strftime('%b/%Y').tolist() |
|
data = df_soi['Índice SOI'].tolist() |
|
title = 'Índice SOI' |
|
|
|
dff = df_soi.copy() |
|
dff.index = index |
|
dff_resample = dff.rolling(3).mean() |
|
dff_resample = dff[2:] |
|
|
|
new_index = [] |
|
for i in range(len(dff.index)): |
|
if i+2 < len(dff.index) and i+1 < len(dff.index): |
|
new_index.append(dff.index[i][0] + dff.index[i+1][0] + dff.index[i+2][0] + dff.index[i+2][3:]) |
|
|
|
dff_resample.index = new_index |
|
data = dff_resample['Índice SOI'].dropna().values.tolist() |
|
|
|
color_function = """ |
|
function (params) { |
|
if (params.value > 0) { |
|
return 'red'; |
|
} else { |
|
return 'blue'; |
|
} |
|
} |
|
""" |
|
|
|
soi_plot = ( |
|
|
|
Bar() |
|
.add_xaxis(new_index) |
|
.add_yaxis("Indice SOI", data, itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function))) |
|
.set_global_opts(title_opts=opts.TitleOpts(title=title, subtitle="Fonte: NCEI/NOAA", subtitle_link='https://www.ncei.noaa.gov/access/monitoring/enso/soi'), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), |
|
legend_opts=opts.LegendOpts(is_show=False), |
|
|
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=len(index)), opts.DataZoomOpts(type_="inside")] |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
) |
|
|
|
return soi_plot |
|
|
|
|
|
|
|
def plot_poama(): |
|
|
|
csv = 'https://raw.githubusercontent.com/josepaulo1233/enso-assets/main/xlsx/poama.csv' |
|
df = pd.read_csv(csv, sep=';') |
|
df.columns = ['Mês', 'Anomalia região 3.4', 'Abaixo', 'Neutro', 'Acima'] |
|
|
|
index = df['Mês'].values.tolist() |
|
title = 'Previsão POAMA' |
|
data_anomalia = df['Anomalia região 3.4'].values.tolist() |
|
data_abaixo = (df['Abaixo']*100).values.tolist() |
|
data_neutro = (df['Neutro']*100).values.tolist() |
|
data_acima = (df['Acima']*100).values.tolist() |
|
|
|
poama_plot_bar = ( |
|
|
|
Bar() |
|
.add_xaxis(index) |
|
.add_yaxis("La Niña", data_abaixo, color='blue') |
|
.add_yaxis("Neutro", data_neutro, color='green') |
|
.add_yaxis("El Niño", data_acima, color='red') |
|
.set_global_opts(title_opts=opts.TitleOpts( |
|
|
|
|
|
), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), |
|
legend_opts=opts.LegendOpts(orient='horizontal', type_='scroll', pos_top='bottom', item_gap=23, border_width=0), |
|
xaxis_opts=opts.AxisOpts(axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"), splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} %"), |
|
name='Probabilidade', |
|
name_location='middle', |
|
name_gap=100, |
|
name_textstyle_opts=opts.TextStyleOpts(font_size=13, font_weight='bold') |
|
), |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
.extend_axis(yaxis=opts.AxisOpts( |
|
type_="value", |
|
min_=-1.5, |
|
max_=3.5, |
|
interval=1, |
|
axislabel_opts=opts.LabelOpts(formatter="{value} °C"), |
|
) |
|
) |
|
|
|
) |
|
|
|
poama_plot_line = ( |
|
|
|
Line() |
|
.add_xaxis(index) |
|
.add_yaxis("Anomalia de TSM", |
|
data_anomalia, |
|
color='black', |
|
linestyle_opts=opts.LineStyleOpts(width=5), symbol_size=10, |
|
|
|
|
|
yaxis_index=1, |
|
) |
|
|
|
) |
|
|
|
poama_plot_bar.overlap(poama_plot_line) |
|
|
|
return poama_plot_bar |
|
|
|
|
|
|
|
def plot_cpc_iri_dinamico(): |
|
|
|
data1 = modelos_dinamicos['GFDL SPEAR'].values.tolist() |
|
data2 = modelos_dinamicos['AUS-ACCESS'].values.tolist() |
|
data3 = modelos_dinamicos['BCC_CSM11m'].values.tolist() |
|
data4 = modelos_dinamicos['COLA CCSM4'].values.tolist() |
|
data5 = modelos_dinamicos['CS-IRI-MM'].values.tolist() |
|
data6 = modelos_dinamicos['DWD'].values.tolist() |
|
data7 = modelos_dinamicos['ECMWF'].values.tolist() |
|
data8 = modelos_dinamicos['IOCAS ICM'].values.tolist() |
|
data9 = modelos_dinamicos['JMA'].values.tolist() |
|
data10 = modelos_dinamicos['KMA'].values.tolist() |
|
data11 = modelos_dinamicos['LDEO'].values.tolist() |
|
data12 = modelos_dinamicos['MetFRANCE'].values.tolist() |
|
data13 = modelos_dinamicos['NASA GMAO'].values.tolist() |
|
data14 = modelos_dinamicos['NCEP CFSv2'].values.tolist() |
|
data15 = modelos_dinamicos['SINTEX-F'].values.tolist() |
|
data16 = modelos_dinamicos['UKMO'].values.tolist() |
|
data17 = modelos_dinamicos['Média'].round(2).values.tolist() |
|
|
|
index = modelos_dinamicos.index.values.tolist() |
|
|
|
cpc_plot = ( |
|
|
|
Line() |
|
.add_xaxis(index) |
|
.add_yaxis("GFDL SPEAR", data1, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("AUS-ACCESS", data2, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("BCC_CSM11m", data3, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("COLA CCSM4", data4, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("CS-IRI-MM", data5, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("DWD", data6, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("ECMWF", data7, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("IOCAS ICM", data8, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("JMA", data9, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("KMA", data10, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("LDEO", data11, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("MetFRANCE", data12, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("NASA GMAO", data13, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("NCEP CFSv2", data14, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("SINTEX-F", data15, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("UKMO", data16, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("Média Dinâmicos", data17, linestyle_opts=opts.LineStyleOpts(width=5), symbol_size=10, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.set_global_opts(title_opts=opts.TitleOpts( |
|
title='Modelos dinâmicos', |
|
|
|
), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, |
|
trigger="item", |
|
|
|
|
|
|
|
), |
|
legend_opts=opts.LegendOpts(orient='horizontal', type_='scroll', pos_top='bottom', item_gap=23, border_width=0), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} °C"), |
|
name='Anomalia de TSM (°C) na região do Niño 3.4', |
|
name_location='middle', |
|
name_gap=100, |
|
name_textstyle_opts=opts.TextStyleOpts(font_size=13, font_weight='bold') |
|
), |
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
|
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False), ) |
|
) |
|
|
|
return cpc_plot |
|
|
|
|
|
|
|
def plot_cpc_iri_estatistico(): |
|
|
|
data1 = modelos_estatisticos['BCC_RZDM'].values.tolist() |
|
data2 = modelos_estatisticos['CDC LIM'].values.tolist() |
|
data3 = modelos_estatisticos['CPC CA'].values.tolist() |
|
data4 = modelos_estatisticos['CPC CCA'].values.tolist() |
|
data5 = modelos_estatisticos['CPC MRKOV'].values.tolist() |
|
data6 = modelos_estatisticos['CSU CLIPR'].values.tolist() |
|
data7 = modelos_estatisticos['FSU REGR'].values.tolist() |
|
data8 = modelos_estatisticos['IAP-NN'].values.tolist() |
|
data9 = modelos_estatisticos['NTU CODA'].values.tolist() |
|
data10 = modelos_estatisticos['PSD-CU LIM'].values.tolist() |
|
data11 = modelos_estatisticos['UBC NNET'].values.tolist() |
|
data12 = modelos_estatisticos['UNB/CWC'].values.tolist() |
|
data13 = modelos_estatisticos['UCLA'].values.tolist() |
|
data14 = modelos_estatisticos['UCLA-TCD'].values.tolist() |
|
data15 = modelos_estatisticos['UW PSL-CSLIM'].values.tolist() |
|
data16 = modelos_estatisticos['UW PSL-LIM'].values.tolist() |
|
data17 = modelos_estatisticos['Média'].round(2).values.tolist() |
|
|
|
index = modelos_estatisticos.index.values.tolist() |
|
|
|
cpc_plot = ( |
|
|
|
Line() |
|
.add_xaxis(index) |
|
.add_yaxis("BCC_RZDM", data1, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
|
|
.add_yaxis("CPC CA", data3, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
|
|
.add_yaxis("CPC MRKOV", data5, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("CSU CLIPR", data6, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
|
|
.add_yaxis("IAP-NN", data8, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("NTU CODA", data9, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
|
|
|
|
|
|
|
|
.add_yaxis("UCLA-TCD", data14, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("UW PSL-CSLIM", data15, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("UW PSL-LIM", data16, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("Média Estatisticos", data17, linestyle_opts=opts.LineStyleOpts(width=5), symbol_size=10, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.set_global_opts(title_opts=opts.TitleOpts(title='Modelos estatísticos', |
|
), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, |
|
trigger="item", |
|
), |
|
legend_opts=opts.LegendOpts(orient='horizontal', type_='scroll', pos_top='bottom', item_gap=23, border_width=0), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} °C"), |
|
name='Anomalia de TSM (°C) na região do Niño 3.4', |
|
name_location='middle', |
|
name_gap=100, |
|
name_textstyle_opts=opts.TextStyleOpts(font_size=13, font_weight='bold') |
|
), |
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False), ) |
|
) |
|
|
|
return cpc_plot |
|
|
|
|
|
|
|
def plot_cpc_iri_todos(): |
|
|
|
data1 = modelos_estatisticos['BCC_RZDM'].values.tolist() |
|
data2 = modelos_estatisticos['CDC LIM'].values.tolist() |
|
data3 = modelos_estatisticos['CPC CA'].values.tolist() |
|
data4 = modelos_estatisticos['CPC CCA'].values.tolist() |
|
data5 = modelos_estatisticos['CPC MRKOV'].values.tolist() |
|
data6 = modelos_estatisticos['CSU CLIPR'].values.tolist() |
|
data7 = modelos_estatisticos['FSU REGR'].values.tolist() |
|
data8 = modelos_estatisticos['IAP-NN'].values.tolist() |
|
data9 = modelos_estatisticos['NTU CODA'].values.tolist() |
|
data10 = modelos_estatisticos['PSD-CU LIM'].values.tolist() |
|
data11 = modelos_estatisticos['UBC NNET'].values.tolist() |
|
data12 = modelos_estatisticos['UNB/CWC'].values.tolist() |
|
data13 = modelos_estatisticos['UCLA'].values.tolist() |
|
data14 = modelos_estatisticos['UCLA-TCD'].values.tolist() |
|
data15 = modelos_estatisticos['UW PSL-CSLIM'].values.tolist() |
|
data16 = modelos_estatisticos['UW PSL-LIM'].values.tolist() |
|
data17 = modelos_estatisticos['Média'].round(2).values.tolist() |
|
|
|
data18 = modelos_dinamicos['GFDL SPEAR'].values.tolist() |
|
data19 = modelos_dinamicos['AUS-ACCESS'].values.tolist() |
|
data20 = modelos_dinamicos['BCC_CSM11m'].values.tolist() |
|
data21 = modelos_dinamicos['COLA CCSM4'].values.tolist() |
|
data22 = modelos_dinamicos['CS-IRI-MM'].values.tolist() |
|
data23 = modelos_dinamicos['DWD'].values.tolist() |
|
data24 = modelos_dinamicos['ECMWF'].values.tolist() |
|
data25 = modelos_dinamicos['IOCAS ICM'].values.tolist() |
|
data26 = modelos_dinamicos['JMA'].values.tolist() |
|
data27 = modelos_dinamicos['KMA'].values.tolist() |
|
data28 = modelos_dinamicos['LDEO'].values.tolist() |
|
data29 = modelos_dinamicos['MetFRANCE'].values.tolist() |
|
data30 = modelos_dinamicos['NASA GMAO'].values.tolist() |
|
data31 = modelos_dinamicos['NCEP CFSv2'].values.tolist() |
|
data32 = modelos_dinamicos['SINTEX-F'].values.tolist() |
|
data33 = modelos_dinamicos['UKMO'].values.tolist() |
|
data34 = modelos_dinamicos['Média'].round(2).values.tolist() |
|
|
|
|
|
index = modelos_estatisticos.index.values.tolist() |
|
|
|
cpc_plot = ( |
|
|
|
Line() |
|
.add_xaxis(index) |
|
.add_yaxis("BCC_RZDM", data1, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
|
|
.add_yaxis("CPC CA", data3, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
|
|
.add_yaxis("CPC MRKOV", data5, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("CSU CLIPR", data6, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
|
|
.add_yaxis("IAP-NN", data8, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("NTU CODA", data9, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
|
|
|
|
|
|
|
|
.add_yaxis("UCLA-TCD", data14, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("UW PSL-CSLIM", data15, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("UW PSL-LIM", data16, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("M.Estatistica", data17, linestyle_opts=opts.LineStyleOpts(width=5), symbol_size=13, symbol='triangle', itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("GFDL SPEAR", data18, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("AUS-ACCESS", data19, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("BCC_CSM11m", data20, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("COLA CCSM4", data21, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("CS-IRI-MM", data22, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("DWD", data23, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("ECMWF", data24, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("IOCAS ICM", data25, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("JMA", data26, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("KMA", data27, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("LDEO", data28, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("MetFRANCE", data29, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("NASA GMAO", data30, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("NCEP CFSv2", data31, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("SINTEX-F", data32, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("UKMO", data33, itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.add_yaxis("M.Dinamica", data34, linestyle_opts=opts.LineStyleOpts(width=5), symbol_size=13, symbol='rect', itemstyle_opts={"emphasis": {"focus": "series"}}) |
|
.set_global_opts(title_opts=opts.TitleOpts(title='Todos modelos', |
|
), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, |
|
trigger="item", |
|
position='bottom' |
|
), |
|
legend_opts=opts.LegendOpts(orient='horizontal', type_='scroll', pos_top='bottom', item_gap=23, border_width=0), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} °C"), |
|
name='Anomalia de TSM (°C) na região do Niño 3.4', |
|
name_location='middle', |
|
name_gap=100, |
|
name_textstyle_opts=opts.TextStyleOpts(font_size=13, font_weight='bold') |
|
), |
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False), ) |
|
) |
|
|
|
return cpc_plot |
|
|
|
|
|
|
|
def plot_iri_concenso(): |
|
|
|
data_nina = df_table['La Niña'].values.tolist() |
|
data_neutro = df_table['Neutral'].values.tolist() |
|
data_nino = df_table['El Niño'].values.tolist() |
|
index = df_table.index.to_list() |
|
title = 'Previsão por consenso' |
|
|
|
cpc_bar = ( |
|
|
|
Bar() |
|
.add_xaxis(index) |
|
.add_yaxis("La Niña", data_nina, color='blue') |
|
.add_yaxis("Neutro", data_neutro, color='green') |
|
.add_yaxis("El Niño", data_nino, color='red') |
|
.set_global_opts(title_opts=opts.TitleOpts(title=title), |
|
tooltip_opts=opts.TooltipOpts(is_show=True), |
|
legend_opts=opts.LegendOpts(orient='horizontal', type_='scroll', pos_top='bottom', item_gap=23, border_width=0), |
|
xaxis_opts=opts.AxisOpts(axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"), splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} %"), |
|
name='Probabilidade', |
|
name_location='middle', |
|
name_gap=100, |
|
name_textstyle_opts=opts.TextStyleOpts(font_size=14, font_weight='bold') |
|
), |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
|
|
) |
|
|
|
return cpc_bar |
|
|
|
|
|
|
|
def plot_daily_ssta(nino, days): |
|
|
|
df = pd.read_table('https://conmet.com.br/public/txt_enso/sst_nino_daily.txt', delim_whitespace=True, index_col=0, parse_dates=True) |
|
|
|
df = df[-int(days):] |
|
index = df.index.strftime('%d/%b/%Y').tolist() |
|
|
|
if nino == 'nino12': |
|
data = df['anom12'].round(2).values.tolist() |
|
title = 'Anomalia TSM Niño 1+2' |
|
elif nino == 'nino3': |
|
data = df['anom3'].round(2).values.tolist() |
|
title = 'Anomalia TSM Niño 3' |
|
elif nino == 'nino34': |
|
data = df['anom34'].round(2).values.tolist() |
|
title = 'Anomalia TSM Niño 3+4' |
|
elif nino == 'nino4': |
|
data = df['anom4'].round(2).values.tolist() |
|
title = 'Anomalia TSM Niño 4' |
|
|
|
color_function = """ |
|
function (params) { |
|
if (params.value > 0) { |
|
return 'red'; |
|
} else { |
|
return 'blue'; |
|
} |
|
} |
|
""" |
|
|
|
oni_plot = ( |
|
|
|
Bar() |
|
.add_xaxis(index) |
|
.add_yaxis("Indice SST", data, itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function))) |
|
.set_global_opts(title_opts=opts.TitleOpts(title=title, subtitle="Fonte: NCEI/NOAA", subtitle_link='https://www.ncei.noaa.gov/products/extended-reconstructed-sst'), |
|
tooltip_opts=opts.TooltipOpts(is_show=True, trigger="axis", axis_pointer_type="cross"), |
|
legend_opts=opts.LegendOpts(is_show=False), |
|
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} °C")), |
|
xaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=False)), |
|
datazoom_opts=[opts.DataZoomOpts(range_start=0, range_end=len(index)), opts.DataZoomOpts(type_="inside")] |
|
) |
|
.set_series_opts(label_opts=opts.LabelOpts(is_show=False)) |
|
) |
|
|
|
return oni_plot |
|
|