import pandas as pd
import numpy as np
from fh_echarts.core import EChart, preview_echarthelpers
Helpers to transform Pandas time-series data into baseline ECharts options dictionaries, while still allowing user customisation.
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")