# 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()