About echarts
echarts is a skill for creating data visualizations with pyecharts and Apache ECharts. It covers common chart types, presentation options, and producing self-contained HTML reports for people building Python-based visualizations.
Key features
- 01Create bar, line, pie, heatmap, and scatter charts
- 02Configure themes, labels, legends, and tooltips
- 03Export visualizations as self-contained HTML
- 04Prepare data as lists for browser rendering
- 05Troubleshoot chart layout and rendering
Use cases
- 01Build charts for data analysis reports
- 02Visualize time series and moving averages
- 03Highlight anomalies in scatter plots
- 04Generate HTML visualization reports
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ rebyteai-template/ rebyte-skills --skill echartsAfter installing, type/echartsin Claude Code to confirm it loaded.
Details
From the project READMEECharts Skill
Technology Stack
- pyecharts: Python wrapper for Apache ECharts
- Apache ECharts: JavaScript charting library
- Output: Self-contained HTML with embedded JS
Chart Types Reference
Bar Charts
from pyecharts.charts import Bar
from pyecharts import options as opts
chart = Bar()
chart.add_xaxis(labels)
chart.add_yaxis("Series Name", values)
chart.set_global_opts(
title_opts=opts.TitleOpts(title="Chart Title"),
tooltip_opts=opts.TooltipOpts(trigger="axis"),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
)
Line Charts
from pyecharts.charts import Line
chart = Line()
chart.add_xaxis(dates)
chart.add_yaxis("Actual", values, is_smooth=True)
chart.add_yaxis("7-Day MA", moving_avg_7, is_smooth=True, linestyle_opts=opts.LineStyleOpts(type_="dashed"))
Pie Charts
from pyecharts.charts import Pie
chart = Pie()
chart.add("", list(zip(labels, values)))
chart.set_global_opts(legend_opts=opts.LegendOpts(orient="vertical", pos_left="left"))
Heatmaps
from pyecharts.charts import HeatMap
chart = HeatMap()
chart.add_xaxis(x_labels)
chart.add_yaxis("", y_labels, value=[[x, y, val], ...])
chart.set_global_opts(
visualmap_opts=opts.VisualMapOpts(min_=0, max_=max_val),
)
Scatter Plots (for anomalies)
from pyecharts.charts import Scatter
chart = Scatter()
chart.add_xaxis(dates)
chart.add_yaxis("Cost", costs, symbol_size=10)
# Add anomaly markers with different color/size
Critical: Browser Compatibility
Always convert to lists for JavaScript:
# CORRECT
chart.add_xaxis(df['column'].tolist())
chart.add_yaxis("Label", df['values'].tolist())
# WRONG - causes rendering issues
chart.add_xaxis(df['column'].values) # numpy array
chart.add_xaxis(df['column']) # pandas Series
Theme Options
Available themes in pyecharts:
macarons(default) - Colorful, professionalshine- Bright colorsroma- Muted, elegantvintage- Retro feeldark- Dark backgroundlight- Light, minimal
Usage:
from pyecharts.globals import ThemeType
chart = Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
HTML Report Structure
def generate_html_report(self, output_path: str, top_n: int = 10) -> str:
# Create all charts
charts = [
self.create_cost_by_service_chart(top_n),
self.create_cost_by_account_chart(),
# ... more charts
]
# Combine into page
page = Page(layout=Page.SimplePageLayout)
for chart in charts:
page.add(chart)
# Render to file
page.render(output_path)
return output_path
Formatting Numbers
# Currency formatting in tooltips
tooltip_opts=opts.TooltipOpts(
trigger="axis",
formatter="{b}: ${c:,.2f}"
)
# Axis label formatting
yaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(formatter="${value:,.0f}")
)
Common Issues & Solutions
Empty Charts
- Check browser console for JS errors
- Verify
.tolist()on all data - Hard refresh (Ctrl+Shift+R)
- Check data exists in HTML source
Chart Too Small
init_opts=opts.InitOpts(width="100%", height="400px")
Labels Overlapping
xaxis_opts=opts.AxisOpts(
axislabel_opts=opts.LabelOpts(rotate=45, interval=0)
)
Legend Too Long
legend_opts=opts.LegendOpts(
type_="scroll",
orient="horizontal",
pos_bottom="0%"
)
Testing Visualizations
# Test chart creation
uv run pytest tests/test_visualizer.py -v
# Regenerate example report
uv run pytest tests/test_examples.py -v -s
# View in browser
open examples/example_report.html
Comments
Markdown supported