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 LabsNice! 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-UsLet'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-UsAnd 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?