Files
lab_scatter/scatterplot.py
angelotr 6830422dcc For this final checkpoint, I finished the draw_axes(data) and implemented ticks so that plot has clear coordinate reference. The draw_points() function was also finsihed with the use of the no_delay() function which allowed the function to display the points, and done() was used to make the scatter plot visible.
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.
2025-10-07 01:11:38 -04:00

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