Inspiration:
I think that it is useful to know how to visualize data and generate text in Processing. That’s why this week I explored them both, not focusing only on one of them. To be honest, before this version I had many other attempts to make something creative (lyric video, for example). However, I gave up for now and decided to represent and compare the interest overtime for a few of my favorite TV-shows, Game of Thrones, Sherlock, and Grey’s Anatomy.
Process:
I took the data from Google Trends Explore and had 3 CSV files, which graphs you can see below. I also added text at the top of my work using the geomerative library. I played with sizes, figures, colors, and actually understood what the functions of this library mean using this resource.
I displayed 3 graphs under each other and added titles to them. I also had the timeline that shows which years are displayed. All titles are typewritten (kinda), so they appear letter by letter.
Problems:
This assignment was not as easy as I thought, so I spend hours understanding how things work here. The order of functions is extremely important because few times elements didn’t display only because I messed up the order.
Code:
import geomerative.*;
RFont font;
RPoint[] pnts;
String phrase = "TV-shows";
String word1 = "Game of Thrones";
String word2 = "Grey's Anatomy ";
String word3 = "Sherlock ";
float xOffset = 0;
Table table1, table2, table3;
float spacing;
PFont f;
int counter;
float[] intervals = new float[11];
void setup() {
size(600, 720);
loadData();
stroke(255, 0, 0, 75);
smooth();
frameRate(5);
f = createFont("Courier New", 10);
textFont(f);
RG.init(this);
font = new RFont("Franklin Goth Ext Condensed.ttf", 85, RFont.LEFT);
RCommand.setSegmentLength(2);
RCommand.setSegmentator(RCommand.UNIFORMLENGTH);
RGroup grp;
grp = font.toGroup(phrase);
grp = grp.toPolygonGroup();
pnts = grp.getPoints();
xOffset = width - grp.getBottomRight().x - grp.getBottomLeft().x;
xOffset = xOffset/2;
for (int i=0; i<10; i++) {
intervals[i]=width/10*i;
}
noFill();
stroke(255, 255, 255, 85);
}
void loadData() {
// Load CSV file into a Table object
// "header" option indicates the file has a header row
table1 = loadTable("GameOfThrones.csv", "csv");
spacing = float(width)/(table1.getRowCount()-3);
println(table1.getRowCount()+" "+spacing);
table2 = loadTable("GreysAnatomy.csv", "csv");
spacing = float(width)/(table2.getRowCount()-3);
println(table2.getRowCount()+" "+spacing);
table3 = loadTable("Sherlock.csv", "csv");
spacing = float(width)/(table3.getRowCount()-3);
println(table3.getRowCount()+" "+spacing);
}
void draw() {
background(10, 10, 20, 80);
line(0, height/4, width, height/4);
for (int i=0; i<10; i++) {
line(intervals[i], height/4+10, intervals[i], height/4-10);
fill(0, 102, 153, 204);
textAlign(CENTER);
textFont(f);
fill(255);
text("201"+i, intervals[i], height/4+20);
}
textAlign(LEFT);
textSize(20);
fill(255);
typewriteText(word1, width/10, height/4+50);
typewriteText(word2, width/10, height/2+50);
typewriteText(word3, width/10, height/4*3+50);
text("some of my favorite", width/10, 30);
text("through the years", width-width/2, height/4-55);
noFill();
beginShape();
for (int i = 3; i < table1.getRowCount(); i++) {
TableRow row0 = table1.getRow(i);
float interest = row0.getFloat(1);
float x = (i-3)*spacing ;
float y = map(interest, 0, 100, height/2, height/4+50);
curveVertex(x, y);
}
endShape();
beginShape();
for (int i = 3; i < table2.getRowCount(); i++) {
TableRow row0 = table2.getRow(i);
float interest = row0.getFloat(1);
float x = (i-3)*spacing ;
float y = map(interest, 0, 100, height*3/4, height/2+50);
curveVertex(x, y);
}
endShape();
beginShape();
for (int i = 3; i < table3.getRowCount(); i++) {
TableRow row0 = table3.getRow(i);
float interest = row0.getFloat(1);
float x = (i-3)*spacing ;
float y = map(interest, 0, 100, height, height*3/4+50);
curveVertex(x, y);
}
endShape();
for (int i=0; i< pnts.length; i++) {
float x = pnts[i].x + xOffset;
float y = pnts[i].y + height/4-80;
float diam = 7;
ellipse(x, y, diam, diam);
}
}
void typewriteText(String word, float start, float finish){
if (counter < word.length())
counter++;
text(word.substring(0, counter), start, finish, width, height);
}

Great job Alima. It’s nicely designed, and also reveals interesting info. I would guess the spikes for GoT and Sherlock are when new episodes/seasons happen. And that the less pointed spikes of Grey’s indicates there are more reruns being watched?