Onward and upward! Forward momentum in writing.

Posted in for writers, Writing
Forward momentum in writing keeps stories from becoming boring

Let’s imagine you’re kinda crazy. You enter an airport, blindfolded, grope toward a ticket counter, and tell the cashier to give you the next flight, but ask them not to tell you where you’re going!

After all, you want to be surprised 🙂

Where you gonna end up? Jamaica? Wyoming? Delaware? France? The moon?

Aren’t you excited already? That anticipation is killing me! Read more »

Color-coding groups for plots: string.to.colors function in fifer()

Posted in Statistics

I used to hate color-coding plots. 'Twas a big pain. Let's say we're trying to plot the relationship between awesomeness and attractiveness in R versus. First, let's read in the R know-how and awesomeness dataset.

Let's peak under the “head”, shall we?

require(fifer) d = read.csv("Awesomeness_Rknowhow.csv") head(d) ## Number.of.Friends R.Know.how Club ## 1 0.46841 -0.7202 Mat Black Labs ## 2 0.01932 0.3678 Mat Black Labs ## 3 0.68488 -0.9006 Mat Black Labs ## 4 -1.15628 1.8706 Mat Black Labs ## 5 -0.76576 -0.1406 Mat Black Labs ## 6 0.15211 -1.4046 Mat Black Labs

Nice! And let's peak under the “tail.” (Okay, bad joke).

tail(d) ## Number.of.Friends R.Know.how Club ## 95 -0.6766 -1.4407 Rs-R-Us ## 96 -0.3809 -1.0437 Rs-R-Us ## 97 1.5243 2.4358 Rs-R-Us ## 98 0.3377 -0.3047 Rs-R-Us ## 99 -1.3506 -1.0900 Rs-R-Us ## 100 -1.4359 -1.6769 Rs-R-Us

Let's say we're at an uber geek convention where SAS, R, and Matlab users alike meet to…er…mingle and speak of common interests. Being the research-minded student you are, you decide to measure three traits of the convention participants: how many friends they have (okay, I know you can't have negative friends and you can't have a fraction of a friend. Stop being so critical!), how much they know about R, and which club they belong to–the Mat Black Labs or the R-R-Us(es). You then plot the relationship betwixt the two quantitative traits:

plot(d[,1:2], ylab="Number of Friends", xlab="R Know-How", xaxt="n", yaxt="n")

What a jumbled mess! Then you remember that you forgot you measured the two groups…but how to plot them. Why, let's color-code them!

This is where the string.to.color function comes in. It requires a vector of strings as inputs (and an optional vector of colors–one for each unique grouping value) and it will output a string of colors (the same length as the original string). Let's take a look:

#### let's look at that vector of strings (or factors) d$Club ## [1] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [5] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [9] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [13] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [17] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [21] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [25] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [29] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [33] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [37] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [41] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [45] Mat Black Labs Mat Black Labs Mat Black Labs Mat Black Labs ## [49] Mat Black Labs Mat Black Labs Rs-R-Us Rs-R-Us ## [53] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [57] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [61] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [65] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [69] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [73] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [77] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [81] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [85] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [89] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [93] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## [97] Rs-R-Us Rs-R-Us Rs-R-Us Rs-R-Us ## Levels: Mat Black Labs Rs-R-Us

And now let's see what string.to.colors does

string.to.colors(d$Club, col=c("red", "blue")) ## colors colors colors colors colors colors colors colors colors colors ## "red" "red" "red" "red" "red" "red" "red" "red" "red" "red" ## colors colors colors colors colors colors colors colors colors colors ## "red" "red" "red" "red" "red" "red" "red" "red" "red" "red" ## colors colors colors colors colors colors colors colors colors colors ## "red" "red" "red" "red" "red" "red" "red" "red" "red" "red" ## colors colors colors colors colors colors colors colors colors colors ## "red" "red" "red" "red" "red" "red" "red" "red" "red" "red" ## colors colors colors colors colors colors colors colors colors colors ## "red" "red" "red" "red" "red" "red" "red" "red" "red" "red" ## colors colors colors colors colors colors colors colors colors colors ## "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" ## colors colors colors colors colors colors colors colors colors colors ## "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" ## colors colors colors colors colors colors colors colors colors colors ## "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" ## colors colors colors colors colors colors colors colors colors colors ## "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" ## colors colors colors colors colors colors colors colors colors colors ## "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue" "blue"

So all it does is replace all the values of “Rs-R-Us” with “blue” and all the values of “Mat Black Labs” with “red.”

Now we can put that into the plot to tell R how we wanna display it:

plot(d[,1:2], ylab="Number of Friends", xlab="R Know-How", xaxt="n", yaxt="n", col = string.to.colors(d$Club, col=c("orange", "purple"))) legend("topleft", legend=c("Mat Black Labs", "Rs-R-Us"), text.col=c("orange", "purple"), bty="n")

We can also “cheat” and use the string.to.colors function to use different symbols!

plot(d[,1:2], ylab="Number of Friends", xlab="R Know-How", xaxt="n", yaxt="n", pch = as.numeric(string.to.colors(d$Club, col=c(11, 16)))) legend("topleft", legend=c("Mat Black Labs", "Rs-R-Us"), pch=c(11, 16), bty="n")

Neato, eh?