Files
lab_scatter/scatterplot.py
tgaeta 5cb7e62ba7 Finished scatter plot implementation
I think it went well, and the goal was decomposed into understandable
chunks. The programmer in me couldn't help but be annoyed with the
redundancies in this implementation; we can avoid redoing the same
calculation, which is how I designed my outline. I know that for most
students this is probably something easily overlooked, but if I were to
teach this lab, I would actually have students use their plan to
implement the plot. You could guide them in the right direction by
saying "break it down into at least n functions" and maybe even go over
this outline as an example but still encourage students to write follow
their own steps.

Making a pie chart would also be a fun project for the turtle library.
I think it would also be conceptually easier for younger students
because you're working with categorical data; make a list the student's
favorite ice-cream flavors and use that data to make a pie chart
2025-10-08 12:20:22 -04:00

66 lines
1.8 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,
)
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()