Files
lab_scatter/scatterplot.py
root b3603aeeb6 I fixed the draw_points function.
I think this lab was challenging, and I'm not sure if I did it the
way we were supposed to, because I had to search how to use multiple
lists the way I wanted to, which was using zip. I tried adding the two
lists but it didn't seem like that would get my what I wanted, and also
it didn't work. I got stuck on getting the points drawn properly for a
while; first, I got a single point, then I was able to get a vertical
line of points, and then I got identical vertical lines of points at
each of the x-values (when I had the y for loop nested inside of the
x for loop).
I think the top-down vs. bottom-up approaches aren't really separate,
but you have to go back and forth between them because the top-down
approach helps to identify some of the pieces you need to work bottom-
up from.
I felt like at the beginning, I thought the program would use some of
the stuff we did in the pipes lab, so that informed my top-down plan.
Another program I thought about writing during this lab was one that
could take a csv file and identify different common elements and group
them and display them, but that has more to do with other tasks I was
doing than this lab probably, but I still think that some of the things
here probably helped me think about breaking that down into smaller
pieces.
2024-10-06 16:10:03 -04:00

82 lines
2.4 KiB
Python

# scatterplot.py
# ------------
# By MWC Contributors
# Uses lots of helper functions in other modules to draw a scatter plot.
from turtle import *
from superturtlescat import *
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_values = get_x_values(data)
xmin, xmax = bounds(x_values)
ticks = get_tick_values(xmin, xmax)
for tick in ticks:
screen_x_position = scale(tick, xmin, xmax, 0, constants.PLOT_WIDTH)
draw_x_tick(screen_x_position, tick)
draw_y_axis()
y_values = get_y_values(data)
ymin, ymax = bounds(y_values)
ticks = get_tick_values(ymin, ymax)
for tick in ticks:
screen_y_position = scale(tick, ymin, ymax, 0, constants.PLOT_WIDTH)
draw_y_tick(screen_y_position, tick)
def draw_points(data, color, size):
"Draws the scatter plot's points."
#For each point in the data:
#Get the x and y value from the point.
#Find the x-bounds and the y-bounds of the data. You'll need these for scaling.
x_values = get_x_values(data)
xmin, xmax = bounds(x_values)
y_values = get_y_values(data)
ymin, ymax = bounds(y_values)
#Find the scaled x-position for the point.
listx = []
for x_value in x_values:
scaled_x = scale(x_value, xmin, xmax, 0, constants.PLOT_WIDTH)
listx.append(scaled_x)
#Find the scaled y-position for the point.
listy = []
for y_value in y_values:
scaled_y = scale(y_value, ymin, ymax, 0, constants.PLOT_WIDTH)
listy.append(scaled_y)
#for something in somethings:
for scaled_x, scaled_y in zip(listx, listy):
draw_point(scaled_x, scaled_y, color, size)
#Use draw_point(scaled_x, scaled_y, color, size) to draw the point.
with no_delay():
data = generate_data(50, 10, 500, 5, 400, 1000)
draw_scatterplot(data, size=5, color="blue")
hideturtle()
done()