helpers

Helpers to transform Pandas time-series data into baseline ECharts options dictionaries, while still allowing user customisation.
import pandas as pd
import numpy as np

from fh_echarts.core import EChart, preview_echart

ts_options


def ts_options(
    data:pd.DataFrame | pd.Series, x:str=None, y:list | str=None, kind:str='line'
)->dict:

Transforms a Pandas DataFrame or Series into a baseline ECharts time-series options dictionary.

Examples

Create some sample time-series data to demonstrate ts_options:

dates = pd.date_range("2024-01-01", periods=30, freq="D")
df = pd.DataFrame({"date": dates, "temperature": 20 + 5 * np.random.randn(30).cumsum() * 0.1, "humidity": 60 + 3 * np.random.randn(30).cumsum() * 0.1})
df.head()
date temperature humidity
0 2024-01-01 20.147174 59.807882
1 2024-01-02 19.853315 59.886825
2 2024-01-03 19.951529 59.373097
3 2024-01-04 19.591586 59.503999
4 2024-01-05 19.548946 59.759795

Basic usage — DataFrame with explicit x column

opts = ts_options(df, x="date")
chart = EChart(opts)
preview_echart(chart)
/usr/local/lib/python3.12/site-packages/IPython/core/display.py:447: UserWarning: Consider using IPython.display.IFrame instead
  warnings.warn("Consider using IPython.display.IFrame instead")

Selecting specific y columns

opts_single = ts_options(df, x="date", y="temperature")
chart_single = EChart(opts_single)
preview_echart(chart_single)
/usr/local/lib/python3.12/site-packages/IPython/core/display.py:447: UserWarning: Consider using IPython.display.IFrame instead
  warnings.warn("Consider using IPython.display.IFrame instead")

Using a DatetimeIndex (no explicit x column)

df_idx = df.set_index("date")
opts_idx = ts_options(df_idx)
chart_idx = EChart(opts_idx)
preview_echart(chart_idx)
/usr/local/lib/python3.12/site-packages/IPython/core/display.py:447: UserWarning: Consider using IPython.display.IFrame instead
  warnings.warn("Consider using IPython.display.IFrame instead")

From a Pandas Series

series = df.set_index("date")["temperature"]
opts_series = ts_options(series)
chart_series = EChart(opts_series)
preview_echart(chart_series)
/usr/local/lib/python3.12/site-packages/IPython/core/display.py:447: UserWarning: Consider using IPython.display.IFrame instead
  warnings.warn("Consider using IPython.display.IFrame instead")

Customising the result

ts_options returns a plain dictionary, so you can merge in any ECharts options before passing to EChart:

opts_custom = ts_options(df, x="date")
opts_custom["title"] = {"text": "Weather Station"}
opts_custom["legend"] = {"show": True}
opts_custom["yAxis"]["name"] = "°C / %"

chart_custom = EChart(opts_custom, theme="dark")
preview_echart(chart_custom)
/usr/local/lib/python3.12/site-packages/IPython/core/display.py:447: UserWarning: Consider using IPython.display.IFrame instead
  warnings.warn("Consider using IPython.display.IFrame instead")