counting / maths /arithmetic /number_line_visualization.py
spagestic's picture
algebra & arithmetic modularized
9b3b8c8
import matplotlib.pyplot as plt
import numpy as np
def create_number_line_visualization(numbers: list, operation: str, result: float) -> plt.Figure:
"""Create a number line visualization for arithmetic operations."""
fig, ax = plt.subplots(figsize=(10, 4))
all_nums = numbers + [result]
min_val = min(all_nums) - 2
max_val = max(all_nums) + 2
ax.axhline(y=0, color='black', linewidth=2)
ax.set_xlim(min_val, max_val)
ax.set_ylim(-1, 1)
tick_range = np.arange(int(min_val), int(max_val) + 1)
ax.set_xticks(tick_range)
for tick in tick_range:
ax.axvline(x=tick, ymin=0.4, ymax=0.6, color='black', linewidth=1)
colors = ['red', 'blue', 'green']
for i, num in enumerate(numbers):
ax.plot(num, 0, 'o', markersize=10, color=colors[i % len(colors)],
label=f'Number {i+1}: {num}')
ax.plot(result, 0, 's', markersize=12, color='purple', label=f'Result: {result}')
if len(numbers) == 2:
op_symbol = {'add': '+', 'subtract': '-', 'multiply': '×', 'divide': '÷'}.get(operation, '?')
title = f"{numbers[0]} {op_symbol} {numbers[1]} = {result}"
else:
title = f"Result: {result}"
ax.set_title(title, fontsize=14, fontweight='bold')
ax.legend(loc='upper right')
ax.set_ylabel('')
ax.set_xlabel('Number Line')
ax.grid(True, alpha=0.3)
return fig