Blog 07

For this week’s blog about information visualization, I found the work by the Stamen Studio very compelling, especially the “OneBayArea Map” that mapps transit ranges around the entire bay area in one program. Besides the eye-catching and interactive homepage, their works include very strategic methods of making useful maps that get straight to the point without sacrificing information. The “OneBayArea Map” not only lets commuters understand commute time and distance, it directly relates this information with housing prices, helpful for homebuyers to find ideal homes to commute from. Moreover, it also encourages commuting methods like bussing, biking, and walking by showing how little time they actually take in some cases, comparable to single person vehicles. It also suggests concepts relating to socioeconomic status and access to public transportation systems. To do so, I think this project includes layering many different types of maps and consolidating the data of these, which is then transferred into codes to revisualize these data into an interactive map. The map’s aesthetics not only generates a nice looking program, but it also creates simplicity and clarity that is very important to an info-packed map.

https://stamen.com/work/onebayarea/

<img source=”https://courses.ideate.cmu.edu/15-104/f2022/wp-content/uploads/2022/10/oakland-30-2.png”>

Looking Outwards 07

The work I selected is 365/360 by Jer Thorp . The work is a visualization that shows the top organizations and personalities every year from 1985 to 2001. The work was created for the New York Times and links people, organizations and events. I selected this work because I was interested in the way Thorp used color and font size as a form of connection in addition to simply lines of connection. This makes the representation of data feel quite dynamic and life like. The piece of work is also circular which shows just how interconnected seemingly different topics are. The work also gives us a sense of Thorp’s sensibilities when it comes to representation and color and font use.

anabelle’s blog 07

http://manovich.net/index.php/exhibitions/on-broadway

One work I found inspiring was Lev Manovich’s “On Broadway.” It resonated with me for two reasons: one, I’m writing this blog while in NYC (hence, Broadway) and two, I appreciate the lack of numbers and traditional data in the project. Overall, I’m not too big on STEM and mathematics, so this feels like a unique approach that tries to broaden the statistical audience to the average math hating person. I also think this approach was generally successful — anyone who views this gains a comprehensive survey of Manhattan even without the physical data (I mean, I find that when I’m reading actual statistics, I generally gloss over the figures and take away the big idea more than anything else anyways). I also liked this project because I felt as if it was something even I could recreate (albeit on a smaller scale). It seems like a lot of data storage (and we’ve learned about NUMEROUS ways to represent and store data already) and visual representation (and this is a creative computing class!). It’s inspiring to think large projects like this are within my reach

Bhaboo’s Looking Outwards – Week 6

I really enjoyed this week’s looking outwards because it really let me look through a countless amounts of research and do my own research on randomness in art. This project by Aaron Tobey creates a 6×6 grid creating 36 rectangles all with it’s own unique geometric patterns, lines, and shapes. I really thought it was cool because although there’s so much going on throughout this piece of art, it’s simplicity and creativity blew me away. I suppose that this artist used some sort of computer program with random functions (maybe even p5.js haha) in order to create this piece of art.

Creator: Aaron Tobey

Piece of Art – Aaron Tobey

Looking Outwards 07: Information Visualization

Where the Wild Bees Are
Moritz Stefaner (+ Jen Christiansen + Jillian Walters)
Nobember 28, 2013

Where the Wild Bees Are – Scientific American

Please discuss the project. What do you admire about it, and why do you admire these aspects of it?
What do you know (or what do you suppose) about the algorithms that generated the work?
It what ways are the creator’s artistic sensibilities manifest in the final form?

The project I have chosen to discuss is ‘Where the wild bees are” by Mortiz Stefaner (+ Jen Christiansen + Jillian Walters). It is an information graphic showing the status of various bee species and the relationship between each bee species the plant species they frequently interact with. One thing I admire is the sheer quantity and complexity of data the graphic is able to succinctly and clearly communicate on a single page. Great care has also been put into establishing a visual language of circular charts, each representing a single bee species, that is reminiscent of the hexagonal bee comb structure to emphasize the bee theme, allowing the graphic to feel clean and coherent. A short explanation of the various visual elements and their meaning can be found on the left, but it is split into short sentences that are easy to parse.

Original data visualization
Initial matrix view in Tableau
gephi explorations

According to Stefaner’s blog post detailing their progress, the first and most crucial step was understanding the feel of the texture of the data – “understanding what can be done with it, and which views seem to generate the most interesting insights.” They first entered the data into a spreadsheet-style program called Tableau and produced a matrix view, which allowed to them to judge the denseness of connectivities between different network links and identify connection patterns. They then investigated the topology of the network (via gephi, an open graph visualisation platform), trying to see if there were any emergent commonalities between bee species that had gone extinct.

Matrix organisations

Organising the plants on the ‘ground’ and the bees in the ‘air’, they then connected the different data sets. However, it became complicated very quickly and difficult to read, prompting them to adopt a more general ‘plant visitation profile’ that highlighted each bee species individually.

“In this case, shifting the view from the macro-patterns to the micro-level… was crucial to untangle the mess and make sure the basic statistics about the bees – the main story = came across well.”

Blog 07

Jen Lowe, an artist and researcher, through her creative technology studio Maximal Expression, creates artistic data visualizations and looks at new ways to represent data that could open up brand new paths in data visualization. For example, her work “early particle flow lidar wind visualization,” is an incredibly smooth wind flow visualization. From the current wind flow diagrams in Architecture, which are static and more general wind visualizations, Lowe’s work opens up a new world for wind flow diagrams. The brightly colored work was made by taking raw, remotely sensed lidar data, filtering it, and putting it through an algorithm that creates wind vectors. The switch from static to animated flow fields inspires lots of new possibilities, personally, about integrating dynamic data visualizations with architecture to make it easier to read. I love how smoothly the colors and lines change, different from the usual static data visualizations. Lowe’s creativity in data visualization is seen all throughout her projects, but this one specifically sparked my interest due to its possible implementations in architecture.

Wind Data Visualization

Jen Lowe

Looking Outwards 7: Information Visualization – Stefanie Posavec

Writing Without Words

Drawing The Dictionary

Stefanie Posavec is an artist and designer experimenting and researching ways to visualize and communicate computational data to all ages and audiences. What I like and find most special about Stefanie’s work is that it is very colorful, fun, and visually appealing. Usually when I think of computational data, I don’t necessarily imagine something animated, cartoon-like, or age friendly. Stefanie’s visualizations deliver themselves like artwork in a children’s book.
In her work, “Drawing the Dictionary,” Stefanie responds to a theme of collections including parts of speech, syllables, first letter of the words, and alphabet. The words in the collection are specifically the 1000 most frequently used words. And used 1000 different colored index cards for each word. The words paper colors were organized by part of speech, background shape by syllables, placement by how frequently they are used, pattern by part of speech, and the pen color by first letter in word.
In her work, “Writing without words,” Stefanie visually showcased text in order to highlight the similarities and differences in writing styles when comparing different authors. She wanted to create a data visualization that was straight forward and one with a subject that was emotionally connecting to humans. To create this, she focused on a book called “On the Road,” by Jack Kerouac and its themes. She did not want to use expressive typography or imagery but rather a subjective representation of information. She wanted the graphics to be quantifiable. She gathered data related to the english language structure.She wanted to visualize the novel as a living element full of energy and thus the novel is split into chapters, paragraphs, sentences, and words like a plant structure. Shorter sentences mean a choppy text and stiff writing style while longer sentences mean they are more free and leisurely. She gathered all data by hand and used math and a calculator to find final sums. Finally she used a computer graphics program instead of a data information one to watch the data generate bit by bit.

Sources:

http://www.stefanieposavec.com/work

Project-07: Hypocycloid Spirograph

Sketch
sketch
/* Evan Stuhlfire
 * estuhlfi@andrew.cmu.edu Section B
 * Project-07: Composition with Curves 
 * Hypocycloid Spirograph */

var rAngle = 30; // rotation angle
var rotation = 0; // degrees of rotation
var maxShapes = 8;
var shape = []; // array of shapes

function setup() {
    createCanvas(480, 480);
    background(250);
    // fill array of objects with default shapes
    createShapes();
}

function draw() {
     // redraw background
    background(250);
    stroke(200);

    // map the mouseX position to a circle for rotation radians
    var xRot = map(mouseX, 0, width, 0, TWO_PI);
    // map the mouseY to half the height to size the shape 
    var my = map(mouseY, 0, height, 50, height/2);
    // r is based on the y position and becomes the radius of the circle
    var r = constrain(my, 100, height/2 - 75);

    // add text to canvas
    addText();

    push(); // store settings
    // translate origin to center
    translate(width/2, height/2);

    // draw the small circles and their curves
    for(var s = 0; s < shape.length; s++) {
        drawSmallShapes(s, height/2 - 25);
    }


    // rotate the canvas based on the mouseX position
    rotate(xRot);
    circle(0, 0, 2 * r);
    // loop over array of shape objects
    for(var s = 0; s < shape.length; s++) {
        // drawSmallShapes(s, maxr);
        // reset degrees of rotation for each shape
        rotation = 0; 
        if(shape[s].on == true){
            // draw the curve in spirograph, 4 times for curve rotation
            for(var i = 0; i < 4; i++) {
                // rotation canvas, start at 0
                rotate(radians(rotation));
                rotation = rAngle;
                drawCurves(shape[s].verts, r, shape[s].color);
            }            
        }
    }
    pop(); // restore settings
}

function mousePressed() {
    // when a shape is clicked it is added or removed
    // from the spirograph, toggles like a button

    // map the mouse position to the translated canvas
    var mx = map(mouseX, 0, width, -240, 240);
    var my = map(mouseY, 0, height, -240, 240);

    // loop through shapes to see if clicked
    for(var i = 0; i < shape.length; i++) {
        var d = dist(shape[i].px, shape[i].py, mx, my);

        // check distance mouse click from center of a shape
        if(d <= shape[i].radius){
            // if on, set to false
            if(shape[i].on == true) {
                shape[i].on = false;  
            } else {
                // if on = false, set true
                shape[i].on = true;
            }
        }
    }
}

function addText() {
    // Add text to canvas
    fill(shape[0].colorB);
    strokeWeight(.1);
    textAlign(CENTER, CENTER);

    // title at top
    textSize(20);
    text("Hypocycloid", width/2, 8);
    text("Spirograph", width/2, 30);
    // directions at bottom
    textSize(10);
    text("Click the circles to toggle curves on or off. Reload for different pen colors.", 
        width/2, height - 5);

    noFill();
    strokeWeight(1);
}

function createShapes() {
    var vCount = 3; // start shapes with 3 verticies
    var sOn = true; // default first shape to show in spirograph
    var angle = 30;
    var shapeRad = 35;

    // create array of shape objects
    for(var i = 0; i < maxShapes; i++) {
        shape[i] = new Object();

        // set object values
        shape[i].verts = vCount;
        // generate random color Bright and Dull for each
        var r = random(255);
        var g = random(255);
        var b = random(255);

        shape[i].colorB = color(r, g, b, 255); // Bright color
        shape[i].colorM = color(r, g, b, 80); // Muted faded color
        shape[i].color = shape[i].colorM;
        shape[i].angle = angle;
        shape[i].px = 0;
        shape[i].px = 0;
        shape[i].radius = shapeRad;
        shape[i].on = sOn;

        // default shapes to not display in spirograph
        sOn = false;      
        vCount++;
        angle += 30;
        if (angle == 90 || angle == 180 || angle == 270) {
            angle += 30;
        }
    }
}

function drawSmallShapes(s, r) {
    // calculate the parametric x and y
    var px = r * cos(radians(shape[s].angle));
    var py = r * sin(radians(shape[s].angle));
    shape[s].px = px;
    shape[s].py = py;

    // map the mouse position to the translated canvas
    var mx = map(mouseX, 0, width, -240, 240);
    var my = map(mouseY, 0, height, -240, 240);

    // check if mouse is hovering over small circle
    var d = dist(shape[s].px, shape[s].py, mx, my);
    if(d <= shape[s].radius) {
        // hovering, make bigger, make brighter
        var hover = 1.25;
        shape[s].color = shape[s].colorB;
    } else {
        // not hovering, make normal size, mute color
        var hover = 1;
        shape[s].color = shape[s].colorM;
    }

    // check if shape is appearing in spriograph
    if(shape[s].on == true) {
        var c = shape[s].colorB; // bright
    } else {
        var c = shape[s].colorM; // muted
    }

    push();
    // move origin to little circle center
    translate(px, py);
    stroke(c); // set color from object
    strokeWeight(2);

    circle(0, 0, shape[s].radius * 2 * hover); // draw little circle
    // draw the curve in the little circle
    drawCurves(shape[s].verts, shape[s].radius * hover, c)
    pop();
}

function drawCurves(n, r, c) {
    // n = number of shape verticies, r = radius, c = color
    // number of vertices for drawing with beginShape
    var nPoints = 50;

    beginShape();
    for(var i = 0; i < nPoints; i++) {
        // map the number of points to a circle
        var t = map(i, 0, nPoints, 0, TWO_PI); // t = theta
        // fit the shape to the radius of the circle
        var value = r/n;
        // calculate hypocycloid at a different number of cusps.
        var px = value * ((n - 1) * cos(t) - cos((n - 1) * t));
        var py = value * ((n - 1) * sin(t) + sin((n - 1) * t)); 
    
        vertex(px, py); // add a vertex to the shape
    }
    noFill();
    stroke(c);
    strokeWeight(1);
    endShape(CLOSE); // close shape
}

Looking Outwards 07: Information Visualization

Wind Map is a live visualization of the current direction and wind speeds across the United States. The wind vectors combine to appear almost as smoke churning at different speeds across the country. This project appeals to me visually because it captures the idea of constant change. It can at times be a peaceful flow and at other times it appears agitated and angry. It can appear both ways on the same map depending on where attention is focused.

This project is not limited to weather. It is aesthetically pleasing and useful. It is beautiful and intriguing enough to be on display at the MoMA. At the same time, diverse groups have found its data useful. Birdwatchers have used it to track migration patterns, and cyclists have used it to plan trips. Conspiracy theorists have even used it to track “chemtrails”. This visualization allows this vast, changing dataset to be useful in ways that are impossible with the raw data.

The underlying data for the Wind Map is from the National Digital Forecast Database which provides near term forecasts that are updated once per hour. The visualization was created by Fernanda Viégas and Martin Wattenberg, engineers from the visualization research lab at Google. The entire project is written in html and javascript. A live link to the Wind Map can be found here.

Project-07-Curves

A modified hypotrochoid on top of a modified epitrochoid! I reversed x and y in the second vertex function to create the double layered effect.

sketch
// Zoe Lin (ID: youlin)
// Section B

var nPoints = 80;
var angle;
var x, y, theta;
var r, g, b;

function setup() {
  createCanvas(480, 480);
}

function draw() {
  r = map(mouseX, 0, width, 0, 20); //draws bg color based on mouse pos
  g = map(mouseY, 0, height, 0, 20);
  b = map(mouseX, 0, height, 0, 20);
  background(r, g, b);
  noFill();
  stroke(130);
  translate(width/2, height/2);
  moddedeEpitrochoid(); //draws first geometry at center
  rotate(HALF_PI); //draws second at an angle
  moddedeEpitrochoid();
  hypotrochoid(); 
  rotate(PI / 3); //repeat at third angle
  moddedeEpitrochoid();
  hypotrochoid();

function moddedeEpitrochoid() {
    var a = 85; //angle
    var h = constrain(mouseY / 10, 0, 100); //limits geometry size
    var mouse = mouseX / 70;
    
    beginShape();
    for (var i = 0; i < nPoints; i++) {
        theta = map(i, 0, nPoints, 0, TWO_PI);
        //modified formula for epitrochoid
        x = (a+a/2) * sin(theta) - cos(mouse + theta * (a + a/2) / a/2) * h;
        y = (a+a/2) * cos(theta) - sin(mouse + theta * (a + a/2) / a/2) * h;
        vertex(x, y);
        vertex(y, x); //layers vertexes, draws 2d geometry
    }
    endShape();
 }
  strokeWeight(0.25);
}

function hypotrochoid() { 
    var h = constrain(mouseX / 100, 205, height); //contrains geometry size
    var a = map(mouseX, 0, width, 25, 15); //maps mouse pos to desired angle
    var b = map(mouseY, 0, height, 0, 15);
    beginShape();
      for (var i = 0; i < nPoints-15; i ++) {
        var theta2 = map(i, 0, width/2, 0, 50);
        //hypotrochoid formula
        x = (a - b) * cos(theta2) + h * sin((a - b) * theta2);
        y = (a - b) * sin(theta2) - h * cos((a - b) * theta2);
        vertex(x, y);
      }
    endShape();
}