code123
code123

Reputation: 2146

Boxplot with two levels and multiple data.frames

I have 4 data.frames with two factor levels in each data.frame. df1 is reproduced below. Please duplicate df1 to produce df2...df4.

How can I produce boxplots with ggplot2 such that my final figure looks very similar to the figure below? The seasons in the figure represent the dataframe names while present and future represent level names and the legend represents heavy, heavy, heaviest in the data reproduced here.

Ignore the dotted horizontal red line.

enter image description here

df1= structure(list(id = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 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, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("NN", "SS"), class = "factor"), 
        heavy = c(0.136230125, 0.136281211, 0.136038018, 0.135392862, 
        0.137088902, 0.136028293, 0.13640057, 0.135317058, 0.13688615, 
        0.136448994, 0.137089424, 0.136810847, 0.135865471, 0.136130096, 
        0.136361327, 0.137796714, 0.136052839, 0.135892646, 0.13544437, 
        0.136452363, 0.135367421, 0.135617509, 0.138202559, 0.135396942, 
        0.135930092, 0.135661805, 0.135666, 0.135860128, 0.137648687, 
        0.136057353, 0.136057731, 0.135162399, 0.136080113, 0.135285036, 
        0.136204839, 0.138058091, 0.137215664, 0.135696637, 0.135863902, 
        0.135733243, 0.138274445, 0.136632122, 0.137787919, 0.135033093, 
        0.136926798, 0.136766413, 0.13690947, 0.135203152, 0.138370968, 
        0.136862356, 0.136083112, 0.138212845, 0.135964773, 0.13583601, 
        0.134923731, 0.135828965, 0.136272539, 0.138127602, 0.137028323, 
        0.136526836, 0.136407397, 0.137025373, 0.138358757, 0.137858521, 
        0.135464076, 0.136302506, 0.135528362, 0.137540677, 0.136455865, 
        0.138470144, 0.137227895, 0.136296955, 0.136792631, 0.135875782, 
        0.13815733, 0.136383864, 0.136696618, 0.13857652, 0.136700903, 
        0.136743873, 0.136033619, 0.135970522, 0.135816385, 0.136003984, 
        0.136583925, 0.136768202, 0.136292002, 0.136316737, 0.136540075, 
        0.136051218, 0.135924119, 0.136736303, 0.136946894, 0.136266073, 
        0.136263692, 0.136399301, 0.13611577, 0.135857095, 0.136769488, 
        0.136072466, 0.135564224, 0.136496131, 0.137659507, 0.136704681, 
        0.136542173, 0.136777403, 0.135771538, 0.13665463, 0.136984748, 
        0.137717859, 0.138195237, 0.136232227, 0.135956814), heavier = c(0.227332679, 
        0.227200132, 0.227299118, 0.227289816, 0.22724478, 0.227082442, 
        0.227861315, 0.227055561, 0.227112284, 0.228651438, 0.228158412, 
        0.228789678, 0.227188949, 0.228850198, 0.227246991, 0.227359368, 
        0.227359531, 0.227310607, 0.229490445, 0.227295226, 0.227958185, 
        0.228104958, 0.227254823, 0.22715392, 0.228062515, 0.227509559, 
        0.227143662, 0.230048719, 0.227860836, 0.228467792, 0.227263728, 
        0.227222794, 0.227165592, 0.227140611, 0.228424335, 0.227356425, 
        0.227243374, 0.228936267, 0.227320467, 0.22738371, 0.227694891, 
        0.227270428, 0.227751798, 0.228803279, 0.227330453, 0.229679261, 
        0.228999206, 0.227227604, 0.227247085, 0.227198567, 0.229234921, 
        0.227211613, 0.23007234, 0.226793036, 0.226474338, 0.226654333, 
        0.229964991, 0.22880328, 0.22700099, 0.226640822, 0.227522393, 
        0.227463578, 0.227832692, 0.227293936, 0.230154101, 0.229813709, 
        0.22761097, 0.227445308, 0.228669159, 0.22660539, 0.229017398, 
        0.230421347, 0.227041103, 0.227583471, 0.229547568, 0.22676335, 
        0.226737661, 0.229922588, 0.226907188, 0.227102239, 0.226469073, 
        0.230680908, 0.227763879, 0.226882448, 0.226741993, 0.226693024, 
        0.22671415, 0.226773662, 0.227795194, 0.226983096, 0.226647946, 
        0.226799552, 0.226759218, 0.22692942, 0.226601519, 0.227098192, 
        0.226886889, 0.226959012, 0.226552119, 0.226809761, 0.226786285, 
        0.226709252, 0.226834015, 0.228033943, 0.226693494, 0.22748613, 
        0.227608804, 0.22685023, 0.226586619, 0.227718907, 0.228890098, 
        0.226701909, 0.230919944), heaviest = c(0.316870607, 0.316772978, 
        0.316851707, 0.317017543, 0.316673994, 0.317224709, 0.319234458, 
        0.31861305, 0.319804304, 0.318605816, 0.316930034, 0.31688398, 
        0.316789552, 0.320783976, 0.317094325, 0.31809319, 0.317134565, 
        0.318173976, 0.317213167, 0.317084404, 0.321712205, 0.317128056, 
        0.316866913, 0.3170489, 0.31712423, 0.31684494, 0.319497635, 
        0.316932301, 0.316864646, 0.317279005, 0.316887692, 0.317134437, 
        0.316792589, 0.320894499, 0.319883014, 0.316924639, 0.316575642, 
        0.31686389, 0.316985994, 0.321566256, 0.316683995, 0.320299883, 
        0.317308965, 0.318151948, 0.316479828, 0.319857732, 0.317171909, 
        0.322137849, 0.316526917, 0.316870364, 0.322205784, 0.317055758, 
        0.320329144, 0.318015397, 0.318719989, 0.317910658, 0.317292016, 
        0.321348723, 0.319915048, 0.317160762, 0.318773245, 0.319627925, 
        0.31869767, 0.322422407, 0.32082693, 0.318034899, 0.318760783, 
        0.318325502, 0.320739086, 0.317216142, 0.32284544, 0.319466593, 
        0.318740499, 0.317489944, 0.319064923, 0.322014928, 0.317353897, 
        0.318904583, 0.317931141, 0.323295254, 0.318924712, 0.318965677, 
        0.317700019, 0.31793468, 0.317699508, 0.317168657, 0.318903983, 
        0.317493401, 0.317511406, 0.317483897, 0.31748495, 0.317776804, 
        0.318893431, 0.317663608, 0.316978585, 0.317473467, 0.317500429, 
        0.317144259, 0.317330826, 0.317610353, 0.317881476, 0.31707787, 
        0.317728374, 0.317452137, 0.31938939, 0.317199373, 0.31898747, 
        0.318878952, 0.317987024, 0.318951952, 0.318419561, 0.319568088, 
        0.321165413)), .Names = c("id", "heavy", "heavier", "heaviest"
    ), class = "data.frame", row.names = c(NA, -113L))

Upvotes: 1

Views: 1723

Answers (2)

Rorschach
Rorschach

Reputation: 32436

## create some data.frames: this results in a list of four dfs
createDF <- quote(data.frame(id=sample(c("NN", "SS"), 100, rep=T),
                             heavy=runif(100),
                             heavier=runif(100),
                             heaviest=runif(100)))
dfs <- lapply(1:4, function(i) eval(createDF))

## join and shape them
library(reshape2)
dat <- do.call(rbind, dfs)
dat$dfid <- paste("df", rep(1:4, times=sapply(dfs, nrow)))
dat <- melt(dat, id.vars=c("id", "dfid"))

ggplot(dat, aes(id, value, group=interaction(variable, id), fill=variable)) +
  geom_boxplot() +
  facet_grid(~dfid)

enter image description here

Upvotes: 3

Chris Watson
Chris Watson

Reputation: 1367

Something like this?

df1$season<- 'winter'
df2$season<- 'spring'
df3$season<- 'summer'
df4$season<- 'fall'
df1.m <- melt(df1, id.vars=c('id', 'season'), variable.name='weight', value.name='weight')
df2.m <- melt(df2, id.vars=c('id', 'season'), variable.name='weight', value.name='weight')
df3.m <- melt(df3, id.vars=c('id', 'season'), variable.name='weight', value.name='weight')
df4.m <- melt(df4, id.vars=c('id', 'season'), variable.name='weight', value.name='weight')
df.all <- rbind(df1.m, df2.m, df3.m, df4.m)

ggplot(df.all, aes(x=id, y=weight, fill=weightCat)) + geom_boxplot() + facet_grid(. ~ season)

Upvotes: 3

Related Questions