generated from mwc/lab_scatter
	At first, this program was pretty tricky, but working through it step by step helped me understand it. The top-down plan from Checkpoint 1 made it easier to see how drawing the axes, ticks, and points all fit together. It was difficult to understand the different parts of the complex program but the top-down plan and outside resources helped me achieve my goal. By the end, I understood how the pieces worked as a whole, and it gave me ideas for other programs like making line graphs or bar charts in the same way.
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# scatterplot.py
 | 
						|
# ------------
 | 
						|
# By MWC Contributors
 | 
						|
# Uses lots of helper functions in other modules to draw a scatter plot.
 | 
						|
 | 
						|
from turtle import *
 | 
						|
from superturtle.movement import no_delay
 | 
						|
import constants
 | 
						|
from generate_data import generate_data
 | 
						|
from ticks import get_tick_values
 | 
						|
from plotting import (
 | 
						|
    prepare_screen, 
 | 
						|
    draw_x_axis, 
 | 
						|
    draw_y_axis,
 | 
						|
    draw_x_tick, 
 | 
						|
    draw_y_tick,
 | 
						|
    draw_point, 
 | 
						|
)
 | 
						|
from transform import (
 | 
						|
    maximum, 
 | 
						|
    minimum,
 | 
						|
    bounds, 
 | 
						|
    clamp,
 | 
						|
    ratio, 
 | 
						|
    scale,
 | 
						|
    get_x_values,
 | 
						|
    get_y_values,
 | 
						|
)
 | 
						|
import random
 | 
						|
 | 
						|
 | 
						|
def draw_scatterplot(data, size=5, color="black"):
 | 
						|
    # this draws a scatter plot, showing the data
 | 
						|
    prepare_screen()
 | 
						|
    draw_axes(data)
 | 
						|
    draw_points(data, color, size)
 | 
						|
 | 
						|
 | 
						|
def draw_axes(data):
 | 
						|
    #this draws the scatter plot's axes
 | 
						|
 | 
						|
    # X-Axis
 | 
						|
    draw_x_axis()
 | 
						|
    x_values = get_x_values(data)
 | 
						|
    xmin, xmax = bounds(x_values)
 | 
						|
    x_ticks = get_tick_values(xmin, xmax)
 | 
						|
 | 
						|
    for tick in x_ticks:
 | 
						|
        # this scales tick position to screen coordinates
 | 
						|
        screen_x = scale(tick, xmin, xmax, 0, constants.PLOT_WIDTH)
 | 
						|
        draw_x_tick(screen_x, tick)
 | 
						|
 | 
						|
    # Y-Axis 
 | 
						|
    draw_y_axis()
 | 
						|
    y_values = get_y_values(data)
 | 
						|
    ymin, ymax = bounds(y_values)
 | 
						|
    y_ticks = get_tick_values(ymin, ymax)
 | 
						|
 | 
						|
    for tick in y_ticks:
 | 
						|
        # this scales tick position to screen coordinates
 | 
						|
        screen_y = scale(tick, ymin, ymax, 0, constants.PLOT_HEIGHT)
 | 
						|
        draw_y_tick(screen_y, tick)
 | 
						|
 | 
						|
 | 
						|
def draw_points(data, color, size):
 | 
						|
    #this Draws the scatter plot's points
 | 
						|
    x_values = get_x_values(data)
 | 
						|
    y_values = get_y_values(data)
 | 
						|
 | 
						|
    xmin, xmax = bounds(x_values)
 | 
						|
    ymin, ymax = bounds(y_values)
 | 
						|
 | 
						|
    for x, y in data:
 | 
						|
        screen_x = scale(x, xmin, xmax, 0, constants.PLOT_WIDTH)
 | 
						|
        screen_y = scale(y, ymin, ymax, 0, constants.PLOT_HEIGHT)
 | 
						|
        draw_point(screen_x, screen_y, color, size)
 | 
						|
 | 
						|
 | 
						|
# MAIN PROGRAM (runs the plot) 
 | 
						|
with no_delay():
 | 
						|
    # Generate random test data
 | 
						|
    data = [(random.randint(10, 500), random.randint(5, 400)) for _ in range(50)]
 | 
						|
    draw_scatterplot(data, size=5, color="blue")
 | 
						|
    hideturtle()
 | 
						|
 | 
						|
done()
 |