From 8792c03e640ae2ee57a3467a6b88eff30b53a6e6 Mon Sep 17 00:00:00 2001 From: Michael Simard Date: Fri, 26 Dec 2025 12:17:40 -0600 Subject: [PATCH] Remove weekend gaps from candlestick charts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use index positions instead of datetime for x-axis - All candles now evenly spaced (no gaps for weekends/holidays) - Date labels still show actual dates at regular intervals - Updated example chart to reflect changes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- chart_generator.py | 47 ++++++++++++++++--------- examples/candlestick_chart_example.png | Bin 21329 -> 20934 bytes 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/chart_generator.py b/chart_generator.py index 5654d0e..4954ef0 100644 --- a/chart_generator.py +++ b/chart_generator.py @@ -39,29 +39,37 @@ class ChartGenerator: fig, ax = plt.subplots(figsize=(12, 6), facecolor='#1e1e1e') ax.set_facecolor('#2d2d2d') + # Use index positions to remove weekend gaps + x_pos = list(range(len(closes))) + # Plot closing prices - ax.plot(dates, closes, color='#00d4ff', linewidth=2) + ax.plot(x_pos, closes, color='#00d4ff', linewidth=2) # Fill area under the line - ax.fill_between(dates, closes, alpha=0.3, color='#00d4ff') + ax.fill_between(x_pos, closes, alpha=0.3, color='#00d4ff') - # Format x-axis (detect if intraday or multi-day) + # Format x-axis with date labels (removing gaps) if len(dates) > 0: # Check if all data is from the same day first_date = dates[0].date() last_date = dates[-1].date() is_intraday = first_date == last_date + # Select tick positions (show ~7-10 labels) + tick_spacing = max(1, len(dates) // 7) + tick_indices = list(range(0, len(dates), tick_spacing)) + if tick_indices[-1] != len(dates) - 1: + tick_indices.append(len(dates) - 1) + if is_intraday: # Show time for intraday data - ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M')) - ax.xaxis.set_major_locator(mdates.HourLocator(interval=1)) + tick_labels = [dates[i].strftime('%H:%M') for i in tick_indices] else: # Show date for multi-day data - ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) - ax.xaxis.set_major_locator(mdates.AutoDateLocator()) + tick_labels = [dates[i].strftime('%m/%d') for i in tick_indices] - plt.xticks(rotation=45, ha='right') + ax.set_xticks(tick_indices) + ax.set_xticklabels(tick_labels, rotation=45, ha='right') # Grid styling ax.grid(True, alpha=0.2, color='#ffffff', linestyle='-', linewidth=0.5) @@ -126,35 +134,40 @@ class ChartGenerator: # Calculate bar width width = 0.6 - # Plot candlesticks + # Plot candlesticks using index positions (removes weekend gaps) for i in range(len(dates)): color = '#00ff88' if closes[i] >= opens[i] else '#ff4444' # High-low line - ax.plot([dates[i], dates[i]], [lows[i], highs[i]], color=color, linewidth=1) + ax.plot([i, i], [lows[i], highs[i]], color=color, linewidth=1) # Open-close rectangle height = abs(closes[i] - opens[i]) bottom = min(opens[i], closes[i]) - ax.bar(dates[i], height, width, bottom=bottom, color=color, alpha=0.8) + ax.bar(i, height, width, bottom=bottom, color=color, alpha=0.8) - # Format x-axis (detect if intraday or multi-day) + # Format x-axis with date labels (removing gaps) if len(dates) > 0: # Check if all data is from the same day first_date = dates[0].date() last_date = dates[-1].date() is_intraday = first_date == last_date + # Select tick positions (show ~7-10 labels) + tick_spacing = max(1, len(dates) // 7) + tick_indices = list(range(0, len(dates), tick_spacing)) + if tick_indices[-1] != len(dates) - 1: + tick_indices.append(len(dates) - 1) + if is_intraday: # Show time for intraday data - ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M')) - ax.xaxis.set_major_locator(mdates.HourLocator(interval=1)) + tick_labels = [dates[i].strftime('%H:%M') for i in tick_indices] else: # Show date for multi-day data - ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) - ax.xaxis.set_major_locator(mdates.AutoDateLocator()) + tick_labels = [dates[i].strftime('%m/%d') for i in tick_indices] - plt.xticks(rotation=45, ha='right') + ax.set_xticks(tick_indices) + ax.set_xticklabels(tick_labels, rotation=45, ha='right') # Grid styling ax.grid(True, alpha=0.2, color='#ffffff', linestyle='-', linewidth=0.5) diff --git a/examples/candlestick_chart_example.png b/examples/candlestick_chart_example.png index cf4732a6b2c675ea53892dbc20bfd54ef2df939e..1612eb5a5f30f03e45e3d9964aba08be33c30963 100644 GIT binary patch literal 20934 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 literal 21329 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