diff --git a/examples/graphs/rate-graph.R b/examples/graphs/rate-graph.R
new file mode 100755
index 0000000..6d63298
--- /dev/null
+++ b/examples/graphs/rate-graph.R
@@ -0,0 +1,88 @@
+# Copyright (c) 2012  Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+
+# install.packages ('ggplot2')  
+library (ggplot2)
+# install.packages ('scales')  
+library (scales)
+
+# install.packages ('doBy')
+library (doBy)
+
+#########################
+# Rate trace processing #
+#########################
+data = read.table ("rate-trace.txt", header=T)
+data$Node = factor (data$Node)
+data$FaceId <- factor(data$FaceId)
+data$Kilobits <- data$Kilobytes * 8
+data$Type = factor (data$Type)
+
+# exlude irrelevant types
+data = subset (data, Type %in% c("InInterests", "OutInterests", "InData", "OutData"))
+
+# combine stats from all faces
+data.combined = summaryBy (. ~ Time + Node + Type, data=data, FUN=sum)
+  
+data.root = subset (data.combined, Node == "root")
+data.leaves = subset (data.combined, Node %in% c("leaf-1", "leaf-2", "leaf-3", "leaf-4"))
+
+# graph rates on all nodes in Kilobits
+g.all <- ggplot (data.combined) +
+  geom_point (aes (x=Time, y=Kilobits.sum, color=Type), size=1) +
+  ylab ("Rate [Kbits/s]") +
+  facet_wrap (~ Node)
+
+print (g.all)
+  
+# graph rates on the root nodes in Packets
+g.root <- ggplot (data.root) +
+  geom_point (aes (x=Time, y=Kilobits.sum, color=Type), size=2) +
+  geom_line (aes (x=Time, y=Kilobits.sum, color=Type), size=0.5) +
+  ylab ("Rate [Kbits/s]")
+
+print (g.root)
+
+png ("root-rates.png", width=500, height=250)
+print (g.root)
+dev.off ()
+
+###############################
+# Aggreagate trace processing #
+###############################
+
+data = read.table ("aggregate-trace.txt", header=T)
+data$Node = factor (data$Node)
+data$FaceId <- factor(data$FaceId)
+data$Type = factor (data$Type)
+
+# exlude irrelevant types
+data = subset (data, Type %in% c("InInterests", "OutInterests", "InData", "OutData"))
+
+# Aggregate packet stats in 5-second intervals
+data$Time5Sec = 5 * ceiling (data$Time / 5)
+data.combined = summaryBy (. ~ Time5Sec + Node + Type, data=data, FUN=sum)
+
+data.root = subset (data.combined, Node == "root")
+data.leaves = subset (data.combined, Node %in% c("leaf-1", "leaf-2", "leaf-3", "leaf-4"))
+
+# graph rates on all nodes in Packets
+g.all <- ggplot (data.combined) +
+  geom_point (aes (x=Time5Sec, y=Packets.sum, color=Type), size=2) +
+  geom_line (aes (x=Time5Sec, y=Packets.sum, color=Type), size=0.5) +
+  ylab ("Number of transitted packets in 5 secon intervals") +
+  facet_wrap (~ Node)
+
+print (g.all)
+  
+# graph rates on the root nodes in Packets
+g.root <- ggplot (data.root) +
+  geom_point (aes (x=Time5Sec, y=Packets.sum, color=Type), size=2) +
+  geom_line (aes (x=Time5Sec, y=Packets.sum, color=Type), size=0.5) +
+  ylab ("Number of transitted packets in 5 secon intervals") +
+  ylim (c(0,2000))
+
+print (g.root)
+
+png ("root-5sec-counts.png", width=500, height=250)
+print (g.root)
+dev.off ()
