# 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, ) def draw_scatterplot(data, size=5, color="black"): "Draws a scatter plot, showing the data" prepare_screen() draw_axes(data) draw_points(data, color, size) def draw_axes(data): "Draws the scatter plot's axes." draw_x_axis() x_low, x_high = bounds(get_x_values(data)) x_ticks = get_tick_values(x_low, x_high) for tick in x_ticks: tick_pos = scale(tick, x_low, x_high, 0, constants.PLOT_WIDTH) draw_x_tick(tick_pos, tick) draw_y_axis() y_low, y_high = bounds(get_y_values(data)) y_ticks = get_tick_values(y_low, y_high) for tick in y_ticks: tick_pos = scale(tick, y_low, y_high, 0, constants.PLOT_HEIGHT) draw_y_tick(tick_pos, tick) def draw_points(data, color, size): "Draws the scatter plot's points." x_min, x_max = bounds(get_x_values(data)) y_min, y_max = bounds(get_y_values(data)) for x, y in data: scaled_x = scale(x, x_min, x_max, 0, constants.PLOT_WIDTH) scaled_y = scale(y, y_min, y_max, 0, constants.PLOT_HEIGHT) draw_point(scaled_x, scaled_y, color, size) with no_delay(): data = generate_data(50, 10, 500, 5, 400, 1000) draw_scatterplot(data, size=5, color="blue") hideturtle() done()