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
# 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.

