Visualizing 100k decimals of Pi, Tau and e with Python

Having an interest for numbers, Linux and small scale programming and scripting shortens the route to test out things like this. It generally starts out with: “I wonder what that would look like” and ends in a continuous awe for numbers, programming and Linux. Having seen similar attempts to visualize numbers and an earlier attempt to look for snowball numbers, I wanted to see how the never-ending and never-repeating stream of decimals of Pi would look like.

I would have to decide some basic rules, but let those rules be repeated for all digits. For each of the decimals, I chose to draw a tiny square, then move in one direction the same length as one side of the square TIMES the decimal digit. Then I would turn 90 degrees counter-clockwise TIMES the decimal digit. Of course, this could have been completely different, but I would have to settle on something. This would do, I thought to myself. I also chose ten distinct hexadecimal colors and let each digit 0-9 have its own color, just to make the result colorful.

Plotting the decimals, close-up

I wanted to test this on Pi, but why stop there. I could compare the never-ending decimals of Pi with Tau or Eulers constant e as well. What would they look like compared to each other?


First, I had to find the long trail of decimals and I know I could have gone online and found already calculated decimals, probably a lot of the too, but where is the fun in that? I set out to do the calculations myself. For that task I chose the command line calculator bc, which did this very nicely. I did take some time for 100.000 decimals, about a day and a half on an old 64bit computer running Ubuntu.

$ BC_LINE_LENGTH=0 bc -l <<< "scale=100000; 4*a(1)" >> pi100k.txt 

This worked fine for Pi and Tau, but e not so much. It ran for a few days and I had to give up. I’m not sure what method bc uses for solving e(1), but I had to resolve to the precalculated list mentioned above. I used the linux command head -c100002 to grab the first 100k decimal from a 160 million text file that site served.

Once I had a text file with all the decimals for each irrational constant, I used Python and a drawing library called turtle for the job. I might have used something else, but I already knew turtle.

The script I wrote for the job takes the text file containing all the decimals as input and saves the result as a postscript file in the same directory or folder. I struggled a little bit with getting the result nicely placed in the center of the .eps file, so I fiddled a wee bit with the start position for the turtle. You can see in the script that I chose different starting positions for the various input files, not automated. This can be improved, but I was focusing on the resulting art instead.


So, you can see the results below. I tried with 10.000 decimals and then 100.000 which gave a nicer structure. I could also go for a million decimals, but this would take a lot of time on my computer. I might give it a go later. Another challenge for later would be so see how the base 10 numbering system is compared to the hexadecimal or other number bases.


100.000 decimals of Pi visualized

100.000 decimals of Pi visualized

100.000 decimals of Tau visualized

100.000 decimals of Tau visualized

100.000 decimals of e visualized

100.000 decimals of e visualized