Table of Contents

Corning Community College

CSCS1730 UNIX/Linux Fundamentals

Project: GRAPHING TREND FIGURES (gtf0)

Errata

Objective

Recently, you spent some quality time with your raw class status data and writing a script to scrape, process, and output meaningful results.

Here we will be taking that to the next step, in appealing to our more visual tendencies: you will be writing a script and coordinating the various tools necessary to graph your project results against the class high, average, median, and low scores for each project (effectively, a graph plotting 5 different trend lines).

Background

Visualization has a number of uses, not only in computing, but in general: our minds are visual engines; we have phrases like “a picture is worth a thousand words”, and there is a considerable amount of truth to that. We can only process so much discrete data at any given moment, yet when there exist instances where we need to process considerably more data than we can take in, we turn to things like visual representations of the data.

By eliminating the exact, and potentially numerous discrete numeric values that would be impossible to keep track of (and formulate proper analyses of), by visually representing the data, both the general sense of the values are preserved, without overwhelming us, and allowing to take in a much broader picture that may be more challenging to do if all we had were an endless stream of numbers to evaluate.

This project has us taking that step, taking our data we now have experience in gathering, and plotting it against various class benchmarks, so we can better gauge our overall progress in the class.

Plotting with gnuplot

For this project, we will be making use of the venerable gnuplot tool. Like many powerful tools we have encountered this semester, we seek only to scratch the surface, and start to familiarize ourselves with the powerful capabilities this resource offers us.

Following will be some usage examples to help you get a feel for how to use the tool (barely scratching the surface of what it can do):

plotting a single line

the data

1.0 430
1.5 120
2.0 431
2.5 600
2.6 610
2.9 620
3.0 432
4.0 500
5.0 510
5.5 900

the gnuplot file

set title 'Line'
set xlabel 'x'
set ylabel 'y (1/100)'

set terminal png size 600,400

unset key
set tics out nomirror
set border 3 front linetype black linewidth 1.0 dashtype solid

set xrange [1:5]
set xtics 1, .5, 5
set mxtics 1

set style line 1 linecolor rgb '#0060ad' linetype 1 linewidth 3

plot 'line.data' using 1:($2/100) with lines linestyle 1 title 'data'

generating the graph

lab46:~/src/gtf0$ gnuplot line.gp > ~/public_html/gtf0/line.png
lab46:~/src/gtf0$ chmod 0604 ~/public_html/gtf0/line.png
lab46:~/src/gtf0$ # view line.png in web browser

the graph

line graph

plotting lines

the data

1.0 430 110
1.5 120 125
2.0 431 130
2.5 600 150
2.6 610 160
2.9 620 192
3.0 432 100
4.0 500 340
5.0 510 450
5.5 900 700

the gnuplot file

set title 'Lines'
set xlabel 'x'
set ylabel 'y'
set terminal png size 600,400

set grid
set key below center horizontal noreverse enhanced autotitle box dashtype solid
set tics out nomirror
set border 3 front linetype black linewidth 1.0 dashtype solid

set xrange [0.9:5.7]
set xtics 1, .5, 6
set mxtics 1

set style line 1 linewidth 4
set style line 2 linewidth 1
set style line 3 linewidth 2

plot 'lines.dat' using 1:2 with lines linestyle 1 title 'line1', \
     '' using 1:3 with lines linestyle 2 title 'line2', \
     '' using 1:($2+$3) with lines linestyle 3 title 'sum'

generating the graph

lab46:~/src/gtf0$ gnuplot lines.gp > ~/public_html/gtf0/lines.png
lab46:~/src/gtf0$ chmod 0604 ~/public_html/gtf0/lines.png
lab46:~/src/gtf0$ # view lines.png in web browser

the graph

lines graph

plotting a histogram

the data

march 5 55 20 30 40
april 6 35 40 30 55
may   7 45 50 60 70

the gnuplot file

set title 'Histogram'
set xlabel 'x'
set ylabel 'y'

set terminal png size 600,400

set grid
set tics out nomirror
set border 3 front linetype black linewidth 1.0 dashtype solid

set xrange [-1:3]
set xtics 1

set yrange [0:80]

set style line 1 linecolor rgb '#0060ad' linetype 1 linewidth 2

set style histogram clustered gap 1 title offset character 0, 0, 0
set style data histograms

set boxwidth 1.0 absolute
set style fill solid 5.0 border -1

plot 'histogram.data' using 2:xtic(1) title 'cactus', \
        '' using 3 title 'maple', \
        '' using 4 title 'willow', \
        '' using 5 title 'birch'

generating the graph

lab46:~/src/gtf0$ gnuplot histogram.gp > ~/public_html/gtf0/histogram.png
lab46:~/src/gtf0$ chmod 0604 ~/public_html/gtf0/histogram.png
lab46:~/src/gtf0$ # view histogram.png in web browser

the graph

histogram graph

Your Task

Your task for this project is as follows:

End result

What you are aiming for is a graph that strongly resembles this one:

Project Metrics graph

… only it adds an additional line: YOUR actual scores on the projects.

So this graph will be a nice visual indicator of how you did in various aspects related to the class as a whole.

Spirit of project

The spirit of the project embodies many aspects we've been focusing on throughout the semester:

Basically: I want your solution to be the result of an honest, genuine brainstorming process where you have (on your own) figured out a path to solving the problem, you have dabbled and experimented and figured things out, and you can command the concepts and tools with a fluency enabling you to pull off such a feat. Your solution should demonstrate the real learning that took place and experience gained.

Cutting corners, avoiding work, skimping on functionality, cheating through getting others to do work for you or finding pre-packaged “answers” on the internet violates the spirit of the project, for they betray your ability to pull off the task on your own.

Submit

Please submit as follows:

lab46:~/src/unix/gtf0$ submit unix gtf0 gtf0.sh gtf0.data gtf0.gp gtf0.png http://lab46.corning-cc.edu/~username/gtf0/gtf0.png
Submitting unix project "gtf0":
    -> gtf0.sh(OK)
    -> gtf0.data(OK)
    -> gtf0.gp(OK)
    -> gtf0.png(OK)
    -> http://lab46.corning-cc.edu/~username/gtf0/gtf0.png

SUCCESSFULLY SUBMITTED
lab46:~/src/unix/gtf0$ 

I'll be looking for the following:

78:gtf0:final tally of results (78/78)
*:gtf0:gtf0.sh directly uses info dir status data when run [4/4]
*:gtf0:gtf0.sh effectively utilizes shell features [4/4]
*:gtf0:gtf0.sh is a proper bash script with shabang and exit [4/4]
*:gtf0:gtf0.sh scrapes pertinent data from class status page [4/4]
*:gtf0:gtf0.sh formats data and generates gtf0.data file [4/4]
*:gtf0:gtf0.sh generates viable gtf0.gp to make intended plot [4/4]
*:gtf0:gtf0.sh submits correct and requested items [4/4]
*:gtf0:gtf0.sh no line in any file exceeds 80 characters in length [4/4]
*:gtf0:gtf0.sh all custom variable name lengths at least 4 symbols [4/4]
*:gtf0:gtf0.data contents arranged by column with headings [4/4]
*:gtf0:gtf0.gp sets proper graph title and axis labels [4/4]
*:gtf0:gtf0.gp sets proper image format and resolution [4/4]
*:gtf0:gtf0.gp sets proper axis range, sets up a grid [4/4]
*:gtf0:gtf0.gp displays a valid key outside of graph area [4/4]
*:gtf0:gtf0.gp grabs data from gtf0.data and sets x tics from it [4/4]
*:gtf0:gtf0.gp uses different line colors and thicknesses [4/4]
*:gtf0:gtf0.gp identifies each line by category [4/4]
*:gtf0:gtf0.sh operates according to specifications [5/5]
*:gtf0:gtf0.sh logic is organized and easy to read [5/5]

Additionally: