ASCII financial line charts for markdown using plotext dot marker. TRIGGERS - financial chart, line chart, plotext, price chart, trading chart, ASCII chart.
Create ASCII financial line charts for GitHub Flavored Markdown using plotext with dot marker (ā¢). Pure text output ā renders correctly on GitHub, terminals, and all monospace environments.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed ā fix this file immediately, don't defer. Only update for real, reproducible issues.
NOT for: Flowcharts or architecture diagrams.
/usr/bin/env bash << 'PREFLIGHT_EOF'
python3 --version &>/dev/null || { echo "ERROR: Python 3 not found"; exit 1; }
if command -v uv &>/dev/null; then PM="uv pip"
elif command -v pip3 &>/dev/null; then PM="pip3"
else echo "ERROR: Neither uv nor pip3 found"; exit 1; fi
python3 -c "import plotext" 2>/dev/null || { echo "Installing plotext via $PM..."; $PM install plotext; }
python3 -c "
import plotext as plt, re
plt.clear_figure()
plt.plot([1,2,3], [1,2,3], marker='dot')
plt.plotsize(20, 5)
plt.theme('clear')
output = re.sub(r'\x1b\[[0-9;]*m', '', plt.build())
assert 'ā¢' in output
" && echo "ā plotext ready (dot marker verified)"
PREFLIGHT_EOF
import re
import plotext as plt
x = list(range(20))
y = [97, 98, 100, 101, 100, 98, 100, 101, 102, 101,
100, 98, 100, 101, 102, 103, 102, 101, 100, 100]
plt.clear_figure()
plt.plot(x, y, marker="dot", label="Price path")
plt.hline(103) # Upper barrier
plt.hline(97) # Lower barrier
plt.hline(100) # Entry price
plt.title("Triple Barrier Method")
plt.xlabel("Time (bars)")
plt.ylabel("Price")
plt.plotsize(65, 22)
plt.theme("clear")
print(re.sub(r'\x1b\[[0-9;]*m', '', plt.build()))
Every chart MUST use these settings:
| Setting | Code | Why |
|---|---|---|
| Reset state | plt.clear_figure() |
Prevent stale data |
| Dot marker | marker="dot" |
GitHub-safe alignment |
| No color | plt.theme("clear") |
Clean text output |
| Strip ANSI | re.sub(r'\x1b\[ā¦', '', ā¦) |
Remove residual escape codes |
| Build as string | plt.build() |
Not plt.show() |
| Marker | GitHub Safe | Use When |
|---|---|---|
"dot" |
Yes | Default ā always use |
"hd" |
Yes | Terminal-only, need smoothness |
"braille" |
No | Never for markdown |
"fhd" |
No | Never ā Unicode 13.0+ only |
/usr/bin/env bash << 'RENDER_EOF'
python3 << 'CHART_EOF'
import re
import plotext as plt
x = list(range(20))
y = [97, 98, 100, 101, 100, 98, 100, 101, 102, 101,
100, 98, 100, 101, 102, 103, 102, 101, 100, 100]
plt.clear_figure()
plt.plot(x, y, marker="dot", label="Price path")
plt.hline(103)
plt.hline(97)
plt.hline(100)
plt.title("Triple Barrier Method")
plt.xlabel("Time (bars)")
plt.ylabel("Price")
plt.plotsize(65, 22)
plt.theme("clear")
print(re.sub(r'\x1b\[[0-9;]*m', '', plt.build()))
CHART_EOF
RENDER_EOF
Every chart MUST be immediately followed by a <details> block with Python source. Explanatory text goes after the <details> block, never between chart and source.
ā
CORRECT: Chart ā <details> ā Explanatory text
ā WRONG: Chart ā Explanatory text ā <details>
See ./references/api-and-patterns.md for full embedding template.
plt.clear_figure() ā Reset statemarker="dot" ā Dot marker for GitHubplt.theme("clear") + re.sub() strip ā No ANSI codesplt.title("...") ā Every chart needs a titleplt.xlabel / plt.ylabel ā Axis labelsplt.plotsize(65, 22) ā Fits 80-col code blocks<details> block immediately after chart (before any explanatory text)| Issue | Cause | Solution |
|---|---|---|
| ANSI codes in output | Missing theme/strip | Add plt.theme("clear") and re.sub() strip |
| Misaligned on GitHub | Wrong marker type | Use marker="dot", never braille/fhd |
| Chart too wide | plotsize too large | Use plt.plotsize(65, 22) for 80-col blocks |
| No diagonal slopes | Too few data points | Use 15+ data points for visible slopes |
ModuleNotFoundError |
Not installed | Run preflight check |
| Empty output | Missing build() |
Use plt.build() not plt.show() |
After this skill completes, check before closing:
Only update if the issue is real and reproducible ā not speculative.