enso / plot.py
jotap12's picture
Add application file
6215101
raw
history blame contribute delete
No virus
35.3 kB
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