TI-84 Plus CE Python: Traceable Plots in Python
These two scripts are an
easy way on how to create plots that are traceable. A traceable
plot allows the user to trace along a scatter plot or functional plot
by using the right and left arrow keys, just like if you made a plot
in a graphing calculators’ graph mode.
The two scripts
presented are:
TIRNDPLT: makes a
scatter plot of ten random points between 0 and 1. The x axis is
the plot marker while the y axis is the random point.
TIFXPLT: makes a plot
of a single function y(x). Radians mode as assumed and the plot is
made of 50 points. You specify the minimum and maximum values of x.
Radians mode is assumed and the math module has imported, allowing
for scientific functions. A caveat is to plot a function where it
is defined for all of the domain given. For instance, for sqrt(x),
no negative values should be included in the domain [xmin, xmax].
The two scripts can be
downloaded here:
https://drive.google.com/file/d/1D3oB7Vrt9cd1e-wXrEkhZbr8VJ_7V4qB/view?usp=sharing
However I am going to
list the code because there are things to be pointed out.
TIRNDPLT
Code:
# TI-84+: Traceable
Plot
# Edward Shore 2026-02-20
# tirndplt.py
#
Plot ten random elements
# import modules
from math
import *
from random import *
from ti_system import *
#
plot module is imported differently
import ti_plotlib as plt
# build a random list
x=[i for i in
range(1,11)]
y=[round(random(),4) for i in range(1,11)]
#
set up the key
# left (2) and right (1) is the trace, enter to
exit (5)
k=0
# set the pointer
p=0
#
constant elements
# clear the screen
plt.cls()
# set
window to allow room for
text
plt.window(0,11,-0.5,1.5)
plt.axes("axes")
#
plot gray grid
plt.color(192,192,192)
plt.grid(1,0.1)
#
main loop, faster?, redraw only replaceable elements
while
k!=5:
# scatter plot, filled dot default
plt.color(0,0,0)
plt.scatter(x,y)
# text at line 1
plt.text_at(1,"<-, ->, press enter to exit","left",1)
# string at line 12
s="x = {0:.0f}, y =
{1:.4f}".format(x[p],y[p])
plt.text_at(12,s,"left",1)
# plot pointer with cross, blue
plt.color(0,0,255)
plt.plot(x[p],y[p],"x")
# get key
k=wait_key()
# left and right keys
if k==2:
#
clear
plt.color(255,255,255)
plt.plot(x[p],y[p],"x")
# replace
plt.color(0,0,0)
plt.plot(x[p],y[p])
p=(p-1)%10
elif k==1:
plt.color(255,255,255)
plt.plot(x[p],y[p],"x")
plt.color(0,0,0)
plt.plot(x[p],y[p])
p=(p+1)%10
# show draw at the
end
plt.text_at(1,"DONE","left",1)
plt.show_plot()
Notes:
1.
Modules used: math, random, ti_system, and ti_plotlib. The
calling of math and random modules allow the user to include math and
random functions. The ti_system has the command wait_key(), which
calls for the user to press a key, and returns a specific code value
when a key is pressed. The module ti_plotlib is for the specific
graphics commands.
2. The y minimum and
maximum values for the plot have a padding of 2 to allow room for the
top and bottom lines which will contain information. The top line
will give instructions for the keys: ← to trace left, → to trace
right, and pressing the [ enter ] exits the program.
3. The script has plots
in two sections. Outside the loop are elements that will stay
permanent: the window, the axis, and the scatter plot. Inside the
loop will be the pointer because it changes.
4. Every time an arrow
key is processed, the pointer first must be “erased” off the
previous position, then move to the next. The pointer is in blue.
The variable p is used for the pointer and will take the value
between 0 and 9.
5. In Python, the
percent symbol is used as a modulus function. So, the expression
(p-1)%10 means (p – 1) mod 10. Similarly, (p+1)%10 means (p + 1)
mod 10. This is what keeps p in the range of [0, 9]. p is an
integer.
6. The use of the
format is required to make reading the coordinates readable.
7. Any script using
ti_plotlib must have a plt.show_plot() command, at least at the end.
It’s primary purpose is to show the final picture and freeze the
screen in graphics mode.
TIFXPLT.py
Code:
# TI-84+: Traceable
Plot
# Edward Shore 2026-02-22
# tifxplt.py
#
Plot a traceable function
# import modules
from math
import *
from random import *
from ti_system import *
#
plot module is imported differently
import ti_plotlib as plt
#
build f(x)
fx=input("y(x)? ")
xmin=eval(input("xmin?
"))
xmax=eval(input("xmax?
"))
chgx=(xmax-xmin)/50
xl=[]
yl=[]
x=xmin
while
x<=xmax:
y=eval(fx)
xl.append(x)
yl.append(y)
x+=chgx
ymin=min(yl)-2
ymax=max(yl)+2
#
set up the key
# left (2) and right (1) is the trace, enter to
exit (5)
k=0
# set the pointer
p=0
#
constant elements
# clear the screen
plt.cls()
# set
window to allow room for
text
plt.window(xmin,xmax,ymin,ymax)
plt.color(16,16,16)
plt.axes("on")
plt.color(0,0,0)
plt.plot(xl,yl,".")
#
main loop, faster?, redraw only replaceable elements
while
k!=5:
# scatter plot, filled dot default
# text at line
1
plt.text_at(1,"<-, ->, press enter to
exit","left",1)
# string at line 12
s="x
= {0:.1f}, y = {1:.4f}".format(xl[p],yl[p])
plt.text_at(12,s,"left",1)
# plot pointer with
cross, blue
plt.color(0,0,255)
plt.plot(xl[p],yl[p],"x")
# get key
k=wait_key()
# left and right keys
if k==2:
#
clear
plt.color(255,255,255)
plt.plot(xl[p],yl[p],"x")
# replace
plt.color(0,0,0)
plt.plot(xl[p],yl[p])
p=(p-1)%50
elif k==1:
plt.color(255,255,255)
plt.plot(xl[p],yl[p],"x")
plt.color(0,0,0)
plt.plot(xl[p],yl[p])
p=(p+1)%50
# show draw at
the end
plt.text_at(1,"DONE","left",1)
plt.show_plot()
Notes:
1. Modules used: math,
random, ti_system, and ti_plotlib. The calling of math and random
modules allow the user to include math and random functions. The
ti_system has the command wait_key(), which calls for the user to
press a key, and returns a specific code value when a key is pressed.
The module ti_plotlib is for the specific graphics commands.
2. The y minimum and
maximum values for the plot have a padding of 2 to allow room for the
top and bottom lines which will contain information. The top line
will give instructions for the keys: ← to trace left, → to trace
right, and pressing the [ enter ] exits the program.
3. The script has plots
in two sections. Outside the loop are elements that will stay
permanent: the window, the axis, and the plot of the function.
Inside the loop will be the pointer because it changes.
4. Every time an arrow
key is processed, the pointer first must be “erased” off the
previous position, then move to the next. The pointer is in blue.
The variable p is used for the pointer and will take the value
between 0 and 49.
5. In Python, the
percent symbol is used as a modulus function. So, the expression
(p-1)%50 means (p – 1) mod 50. Similarly, (p+1)%50 means (p + 1)
mod 50. This is what keeps p in the range of [0, 49]. p is an
integer.
6. The use of the
format is required to make reading the coordinates readable.
7. Any script using
ti_plotlib must have a plt.show_plot() command, at least at the end.
It’s primary purpose is to show the final picture and freeze the
screen in graphics mode.
I hope you enjoy these
programs as I did making them,
Eddie
All
original content copyright, © 2011-2026. Edward Shore.
Unauthorized use and/or unauthorized distribution for commercial
purposes without express and written permission from the author is
strictly prohibited. This blog entry may be distributed for
noncommercial purposes, provided that full credit is given to the
author.