0

I am making a bar plot using lattice in R where I have data for 4 different years on sources of irrigation for different states. using my code, the bar plot is coming fine but I wish the bar corresponding to the year 1996 to be plotted first followed by the bar corresponding to year 2001 etc. so as to show the increasing area being irrigated by tube-wells. However, I am unable to change the ordering. Here is my data and the R code. Many thanks for your help.

# sample data
irr_atlas <- structure(list(state = structure(c(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, 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), .Label = c("ANDHRA PRADESH", 
"KARNATAKA", "MADHYA PRADESH", "RAJASTHAN"), class = "factor"), 
st_code = c(28L, 28L, 28L, 28L, 28L, 28L, 28L, 28L, 28L, 
28L, 28L, 28L, 28L, 28L, 28L, 28L, 29L, 29L, 29L, 29L, 29L, 
29L, 29L, 29L, 29L, 29L, 29L, 29L, 29L, 29L, 29L, 29L, 23L, 
23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 
23L, 23L, 23L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L), year = c(1996L, 1996L, 1996L, 1996L, 
2001L, 2001L, 2001L, 2001L, 2006L, 2006L, 2006L, 2006L, 2011L, 
2011L, 2011L, 2011L, 1996L, 1996L, 1996L, 1996L, 2001L, 2001L, 
2001L, 2001L, 2006L, 2006L, 2006L, 2006L, 2011L, 2011L, 2011L, 
2011L, 1996L, 1996L, 1996L, 1996L, 2001L, 2001L, 2001L, 2001L, 
2006L, 2006L, 2006L, 2006L, 2011L, 2011L, 2011L, 2011L, 1996L, 
1996L, 1996L, 1996L, 2001L, 2001L, 2001L, 2001L, 2006L, 2006L, 
2006L, 2006L, 2011L, 2011L, 2011L, 2011L), irr_area = c(1.84066, 
0.942819, 0.82886, 0.853502, 1.54922, 0.825659, 0.542492, 
1.53412, 1.72969, 0.70271, 0.637221, 1.53894, 1.99893, 0.678425, 
0.819829, 1.70708, 0.921594, 0.231669, 0.316999, 0.358529, 
0.91339, 0.207157, 0.426549, 0.481061, 0.921255, 0.18192, 
0.426145, 0.547193, 0.930802, 0.148065, 0.377149, 1.51843, 
1.59425, 0.112145, 2.67683, 0.540054, 1.48056, 0.030502, 
1.63696, 0.563948, 1.12595, 0.058667, 2.46494, 1.15004, 1.10444, 
0.157069, 2.64378, 2.14177, 1.55814, 0.106623, 2.71347, 0.644683, 
1.35746, 0.030586, 2.41845, 0.935234, 1.76933, 0.054374, 
2.46197, 1.76918, 1.62587, 0.050299, 2.14737, 2.82708),irr_source =             structure(c(1L,2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L, 2L, 4L, 3L, 
1L, 2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L, 2L, 4L, 
3L, 1L, 2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L, 2L, 
4L, 3L, 1L, 2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L, 2L, 4L, 3L, 1L, 
2L, 4L, 3L), .Label = c("Canal", "Tank", "Tube", "Well"), class =    "factor")), .Names = c("state","st_code", "year", "irr_area", "irr_source"),   class = "data.frame", row.names = c(NA, -64L))    

Code for plot...

library(lattice)
barchart(~irr_area | factor(state) + factor(irr_source),
    group=year, data=irr_atlas, auto.key=list(space="right"))
MrFlick
  • 195,160
  • 17
  • 277
  • 295
Ridhima
  • 177
  • 3
  • 18
  • Did you try anything? Even though this question was about ggplot, the answer about ordering your factors works for lattice as well: http://stackoverflow.com/questions/20041136/how-to-avoid-ggplot-sorting-the-x-axis-while-plotting-geom-bar. What order are they printing in for you now? The sample data and code seem to be in the correct order already. – MrFlick Jul 23 '15 at 05:33
  • Yes I did try using the re-order command etc. But the bar for 2011 is plotted first horizontally, i want the bar corresponding to 1996 to be plotted first. – Ridhima Jul 23 '15 at 05:49

1 Answers1

1

As mentioned, ordering of groups in R graphics is usually determined by the ordering of the factor variable. So, you can reorder your factors with factor and its levels argument.

library(lattice)
barchart(~irr_area | factor(state) + factor(irr_source),
         group=factor(year, levels=sort(unique(year), decreasing=T)),  # change the order of years
         data=irr_atlas, auto.key=list(space="right"))

You can switch it back the other way by changing decreasing=F.

Rorschach
  • 31,301
  • 5
  • 78
  • 129
  • Could you tell me how to add labels coresponding to each year so that they appear next to the bar? – Ridhima Jul 23 '15 at 06:31