File size: 1,377 Bytes
9b3b8c8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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