Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Faceting by 2 factors in ggplot2

Tags:

r

ggplot2

I have the following data set and code and have also showed the output from dput(). I want to plot the log(N2012$Rate) column on the y axis with Location on the x axis and faceted vertically by Month and horizontally by Gas. The graph works visually but is not assigning the correct data points to the factors. I'm not sure what I'm doing incorrectly. Sorry for the clumsy code, I'm new to R and have taught myself.

I also want the N2O panels to be yellow and the N2 panels blue. That's also not happening and I'm not sure why.

Data

    Location.Month Gas     Rate Month Location log(N2012$Rate)
1   HighBank July  N2    24.00  July HighBank       3.1780538
2   HighBank July  N2   309.00  July HighBank       5.7333413
3   HighBank July N2O    92.00  July HighBank       4.5217886
4   HighBank July N2O    45.00  July HighBank       3.8066625
5    LowBank July  N2   582.00  July  LowBank       6.3664704
6    LowBank July  N2    27.00  July  LowBank       3.2958369
7    LowBank July N2O   299.00  July  LowBank       5.7004436
8    LowBank July N2O    99.00  July  LowBank       4.5951199
9      Basin July  N2   219.00  July    Basin       5.3890717
10     Basin July  N2  1096.00  July    Basin       6.9994225
11     Basin July  N2   151.00  July    Basin       5.0172798
12     Basin July  N2   326.00  July    Basin       5.7868974
13     Basin July  N2   135.00  July    Basin       4.9052748
14     Basin July  N2    29.00  July    Basin       3.3672958
15     Basin July  N2   140.00  July    Basin       4.9416424
16     Basin July N2O   124.00  July    Basin       4.8202816
17     Basin July N2O    97.00  July    Basin       4.5747110
18     Basin July N2O   177.00  July    Basin       5.1761497
19     Basin July N2O   702.00  July    Basin       6.5539334
20     Basin July N2O   202.00  July    Basin       5.3082677
21     Basin July N2O    76.00  July    Basin       4.3307333
22     Basin July N2O    51.00  July    Basin       3.9318256
23   HighBank Aug  N2  2328.00   Aug HighBank       7.7527648
24   HighBank Aug  N2   584.00   Aug HighBank       6.3699010
25   HighBank Aug N2O  1137.00   Aug HighBank       7.0361485
26   HighBank Aug N2O  1438.00   Aug HighBank       7.2710085
27    LowBank Aug  N2   217.00   Aug  LowBank       5.3798974
28    LowBank Aug  N2   947.00   Aug  LowBank       6.8532991
29    LowBank Aug N2O   398.00   Aug  LowBank       5.9864520
30    LowBank Aug N2O   984.00   Aug  LowBank       6.8916259
31      Basin Aug  N2   787.00   Aug    Basin       6.6682282
32      Basin Aug  N2   365.00   Aug    Basin       5.8998974
33      Basin Aug  N2   597.00   Aug    Basin       6.3919171
34      Basin Aug  N2  6125.00   Aug    Basin       8.7201340
35      Basin Aug  N2 13439.00   Aug    Basin       9.5059162
36      Basin Aug  N2  9348.00   Aug    Basin       9.1429177
37      Basin Aug  N2  8679.00   Aug    Basin       9.0686616
38      Basin Aug N2O  1177.00   Aug    Basin       7.0707241
39      Basin Aug N2O   119.00   Aug    Basin       4.7791235
40      Basin Aug N2O   182.00   Aug    Basin       5.2040067
41      Basin Aug N2O   352.00   Aug    Basin       5.8636312
42      Basin Aug N2O  4051.00   Aug    Basin       8.3067190
43      Basin Aug N2O  1921.00   Aug    Basin       7.5606012
44      Basin Aug N2O  2017.00   Aug    Basin       7.6093665
45  HighBank Sept  N2    25.70  Sept HighBank       3.2464910
46  HighBank Sept  N2    28.30  Sept HighBank       3.3428618
47  HighBank Sept N2O    17.70  Sept HighBank       2.8735646
48  HighBank Sept N2O   157.00  Sept HighBank       5.0562458
49   LowBank Sept  N2     6.19  Sept  LowBank       1.8229351
50   LowBank Sept  N2    67.60  Sept  LowBank       4.2136080
51   LowBank Sept N2O     9.51  Sept  LowBank       2.2523439
52   LowBank Sept N2O   244.00  Sept  LowBank       5.4971682
53     Basin Sept  N2  1077.00  Sept    Basin       6.9819347
54     Basin Sept  N2   160.00  Sept    Basin       5.0751738
55     Basin Sept  N2   949.00  Sept    Basin       6.8554088
56     Basin Sept  N2   714.00  Sept    Basin       6.5708830
57     Basin Sept  N2    28.30  Sept    Basin       3.3428618
58     Basin Sept  N2  1838.00  Sept    Basin       7.5164333
59     Basin Sept  N2   249.00  Sept    Basin       5.5174529
60     Basin Sept N2O   397.00  Sept    Basin       5.9839363
61     Basin Sept N2O   197.00  Sept    Basin       5.2832037
62     Basin Sept N2O   366.00  Sept    Basin       5.9026333
63     Basin Sept N2O    27.60  Sept    Basin       3.3178158
64     Basin Sept N2O    44.20  Sept    Basin       3.7887248
65     Basin Sept N2O   112.00  Sept    Basin       4.7184989
66     Basin Sept N2O   171.00  Sept    Basin       5.1416636
67   HighBank Oct  N2     9.43   Oct HighBank       2.2438961
68   HighBank Oct  N2     3.77   Oct HighBank       1.3270750
69   HighBank Oct N2O     3.13   Oct HighBank       1.1410330
70   HighBank Oct N2O    19.10   Oct HighBank       2.9496883
71    LowBank Oct  N2     2.39   Oct  LowBank       0.8712934
72    LowBank Oct  N2     5.66   Oct  LowBank       1.7334239
73    LowBank Oct N2O    40.20   Oct  LowBank       3.6938670
74    LowBank Oct N2O    27.80   Oct  LowBank       3.3250360
75      Basin Oct  N2    55.60   Oct    Basin       4.0181832
76      Basin Oct  N2    20.20   Oct    Basin       3.0056826
77      Basin Oct  N2    55.20   Oct    Basin       4.0109630
78      Basin Oct  N2     8.90   Oct    Basin       2.1860513
79      Basin Oct  N2     3.72   Oct    Basin       1.3137237
80      Basin Oct  N2     9.06   Oct    Basin       2.2038691
81      Basin Oct  N2     8.04   Oct    Basin       2.0844291
82      Basin Oct N2O    25.50   Oct    Basin       3.2386785
83      Basin Oct N2O    29.30   Oct    Basin       3.3775875
84      Basin Oct N2O    16.90   Oct    Basin       2.8273136
85      Basin Oct N2O     5.17   Oct    Basin       1.6428727
86      Basin Oct N2O     6.33   Oct    Basin       1.8453002
87      Basin Oct N2O     7.72   Oct    Basin       2.0438144
88      Basin Oct N2O     7.58   Oct    Basin       2.0255132

Data structure

Data <-
structure(list(Location.Month = structure(c(6L, 6L, 6L, 6L, 10L, 
10L, 10L, 10L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 5L, 5L, 5L, 5L, 9L, 9L, 9L, 9L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 8L, 8L, 8L, 8L, 12L, 12L, 12L, 
12L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
7L, 7L, 7L, 7L, 11L, 11L, 11L, 11L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("Basin Aug", "Basin July", 
"Basin Oct", "Basin Sept", "HighBank Aug", "HighBank July", "HighBank Oct", 
"HighBank Sept", "LowBank Aug", "LowBank July", "LowBank Oct", 
"LowBank Sept"), class = "factor"), Gas = structure(c(1L, 1L, 
2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L), .Label = c("N2", "N2O"), class = "factor"), 
    Rate = c(24, 309, 92, 45, 582, 27, 299, 99, 219, 1096, 151, 
    326, 135, 29, 140, 124, 97, 177, 702, 202, 76, 51, 2328, 
    584, 1137, 1438, 217, 947, 398, 984, 787, 365, 597, 6125, 
    13439, 9348, 8679, 1177, 119, 182, 352, 4051, 1921, 2017, 
    25.7, 28.3, 17.7, 157, 6.19, 67.6, 9.51, 244, 1077, 160, 
    949, 714, 28.3, 1838, 249, 397, 197, 366, 27.6, 44.2, 112, 
    171, 9.43, 3.77, 3.13, 19.1, 2.39, 5.66, 40.2, 27.8, 55.6, 
    20.2, 55.2, 8.9, 3.72, 9.06, 8.04, 25.5, 29.3, 16.9, 5.17, 
    6.33, 7.72, 7.58), Month = structure(c(1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
    4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("July", "Aug", 
    "Sept", "Oct"), class = "factor"), Location = structure(c(1L, 
    1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 
    1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 
    3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("HighBank", 
    "LowBank", "Basin"), class = "factor"), `log(N2012$Rate)` = c(3.17805383034795, 
    5.73334127689775, 4.52178857704904, 3.80666248977032, 6.36647044773144, 
    3.29583686600433, 5.70044357339069, 4.59511985013459, 5.3890717298165, 
    6.99942246750796, 5.01727983681492, 5.78689738136671, 4.90527477843843, 
    3.36729582998647, 4.9416424226093, 4.82028156560504, 4.57471097850338, 
    5.17614973257383, 6.55393340402581, 5.30826769740121, 4.33073334028633, 
    3.93182563272433, 7.75276480885133, 6.36990098282823, 7.03614849375054, 
    7.27100853828099, 5.37989735354046, 6.85329909318608, 5.98645200528444, 
    6.89162589705225, 6.6682282484174, 5.89989735358249, 6.3919171133926, 
    8.72013403541293, 9.50591620654706, 9.14291769565875, 9.06866159364425, 
    7.07072410726028, 4.77912349311153, 5.2040066870768, 5.8636311755981, 
    8.30671904320269, 7.56060116276856, 7.60936653795421, 3.24649099190117, 
    3.34286180464919, 2.87356463957978, 5.05624580534831, 1.8229350866965, 
    4.21360798304892, 2.2523438765573, 5.4971682252932, 6.98193467715639, 
    5.07517381523383, 6.85540879860993, 6.57088296233958, 3.34286180464919, 
    7.51643330291563, 5.51745289646471, 5.98393628068719, 5.28320372873799, 
    5.90263333340137, 3.3178157727231, 3.78872478908365, 4.71849887129509, 
    5.14166355650266, 2.24389609664537, 1.32707500145992, 1.14103300455206, 
    2.94968833505258, 0.871293365943419, 1.73342389221509, 3.69386699562498, 
    3.32503602069659, 4.01818320125654, 3.00568260440716, 4.01096295328305, 
    2.18605127673809, 1.31372366828506, 2.20386912005489, 2.08442908319087, 
    3.23867845216438, 3.37758751602302, 2.82731362192903, 1.64287268852034, 
    1.84530023615608, 2.04381436403668, 2.02551319965428)), .Names = c("Location.Month", 
"Gas", "Rate", "Month", "Location", "log(N2012$Rate)"), row.names = c(NA, 
-88L), class = "data.frame")

Code

Data$Location = factor(Data$Location,c("HighBank", "LowBank", "Basin"))
Data$Gas = factor(Data$Gas,c("N2", "N2O"))
colvec<-c("blue", "yellow")
Data$Month = factor(Data$Month,c("July", "Aug", "Sept", "Oct"))
p <- ggplot(Data, aes(factor(Location),log(N2012$Rate), factor(Gas)))
pl <- p + geom_boxplot(fill="blue", width = 0.7) + geom_point()  
plo <- pl + scale_fill_manual(values=colvec) + facet_grid(Gas ~ Month)
plot <- plo + xlab("Location") + ylab("log(N2O ug N2O-N/m2/h)")  
plots <-plot + theme(axis.title.x = element_text(face="bold", colour="Black", size=15),
       axis.text.x  = element_text(angle=50, vjust=0.5, size=12, colour="Black"), 
    axis.title.y = element_text(face="bold", size=13), 
    axis.text.y = element_text(size=12, colour="black"))
plots

Thanks,

-Sarah

like image 543
user2055130 Avatar asked Feb 08 '13 18:02

user2055130


1 Answers

Given your dataset, you don't need the factor transformations anymore (since the posted example data already has that done).

I needed to modify a few things. First, log(N2012$Rate) is a non-standard name and so must be enclosed in backticks in code: `log(N2012$Rate)`. Also, to get different colors filling the boxplot, you need to assign Gas to the fill aesthetic and not override it in the boxplot.

ggplot(Data, aes(Location, `log(N2012$Rate)`, fill=Gas)) +
  geom_boxplot(width = 0.7) + 
  geom_point() +
  facet_grid(Gas ~ Month) +
  scale_fill_manual(values=colvec) +
  xlab("Location") + 
  ylab("log(N2O ug N2O-N/m2/h)") + 
  theme(axis.title.x = element_text(face="bold", colour="Black", size=15),
        axis.text.x  = element_text(angle=50, vjust=0.5, size=12, colour="Black"), 
        axis.title.y = element_text(face="bold", size=13), 
        axis.text.y = element_text(size=12, colour="black"))

enter image description here

like image 94
Brian Diggs Avatar answered Sep 20 '22 17:09

Brian Diggs