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 #@st.cache_data 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 ############################################################################################################### #@st.cache_data 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 ############################################################################################################### #@st.cache_data 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 ############################################################################################################### #@st.cache_data 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 ############################################################################################################### #@st.cache_data 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] # INSERINDO MANUALMENTE OS VALORES 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), #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 soi_plot ############################################################################################################### #@st.cache_data 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] # INSERINDO MANUALMENTE OS VALORES 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), #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 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( #title=title, # subtitle="Fonte: POAMA", subtitle_link='http://www.bom.gov.au/climate/ocean/outlooks/' ), 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, #color=JsCode(color_function), #itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_function)), 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', #subtitle="Fonte: NCEI/NOAA", subtitle_link='https://www.ncei.noaa.gov/access/monitoring/enso/soi' ), tooltip_opts=opts.TooltipOpts(is_show=True, trigger="item", #axis_pointer_type="cross", #trigger="item", #trigger_on="mousemove" ), 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)), #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 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("CDC LIM", data2) .add_yaxis("CPC CA", data3, itemstyle_opts={"emphasis": {"focus": "series"}}) #.add_yaxis("CPC CCA", data4) .add_yaxis("CPC MRKOV", data5, itemstyle_opts={"emphasis": {"focus": "series"}}) .add_yaxis("CSU CLIPR", data6, itemstyle_opts={"emphasis": {"focus": "series"}}) #.add_yaxis("FSU REGR", data7) .add_yaxis("IAP-NN", data8, itemstyle_opts={"emphasis": {"focus": "series"}}) .add_yaxis("NTU CODA", data9, itemstyle_opts={"emphasis": {"focus": "series"}}) #.add_yaxis("PSD-CU LIM", data10) #.add_yaxis("UBC NNET", data11) #.add_yaxis("UNB/CWC", data12) #.add_yaxis("UCLA", data13) .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("CDC LIM", data2) .add_yaxis("CPC CA", data3, itemstyle_opts={"emphasis": {"focus": "series"}}) #.add_yaxis("CPC CCA", data4) .add_yaxis("CPC MRKOV", data5, itemstyle_opts={"emphasis": {"focus": "series"}}) .add_yaxis("CSU CLIPR", data6, itemstyle_opts={"emphasis": {"focus": "series"}}) #.add_yaxis("FSU REGR", data7) .add_yaxis("IAP-NN", data8, itemstyle_opts={"emphasis": {"focus": "series"}}) .add_yaxis("NTU CODA", data9, itemstyle_opts={"emphasis": {"focus": "series"}}) #.add_yaxis("PSD-CU LIM", data10) #.add_yaxis("UBC NNET", data11) #.add_yaxis("UNB/CWC", data12) #.add_yaxis("UCLA", data13) .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 ############################################################################################################### #@st.cache_data 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