Changing the width of bars and columns in googleVis
Changing the plotting width in bar-, column- and combo-charts of googleVis works identical and is defined by thebar.groupWidth
argument. The dot in the argument means that it has to be split in R into bar="{groupWidth:'10%'}"
. Example
library(googleVis)
cc <- gvisColumnChart(head(Population,10),
xvar="Country", yvar="Population",
options=list(seriesType="bars", legend="top",
bar="{groupWidth:'10%'}",
width=500, height=450),
chartid="thincolumns")
plot(cc)
Session Info
R version 3.0.1 (2013-05-16)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] googleVis_0.4.5
loaded via a namespace (and not attached):
[1] RJSONIO_1.0-3 tools_3.0.1
Using planel.groups in lattice
Last Tuesday I attended the LondonR user group meeting, where Rich and Andy from Mango argued about the better package for multivariate graphics with R: lattice vs. ggplot2.As part of their talk they had a little competition in visualising London Underground performance data, see their slides. Both made heavy use of the respective panelling / faceting capabilities. Additionally Rich used the
panel.groups
argument of xyplot
to fine control the content of each panel. Brilliant! I had never used this argument before. So, here is a silly example with the iris
data set to remind myself of panel.groups
in the future.ave and the "[" function in R
Theave
function in R is one of those little helper function I feel I should be using more. Investigating its source code showed me another twist about R and the "[" function. But first let's look at ave
.The top of
ave
's help page reads:Group Averages Over Level Combinations of Factors
Subsets of x[] are averaged, where each subset consist of those observations with the same factor levels.
As an example I look at revenue data by product and shop.
revenue <- c(30,20, 23, 17) product <- factor(c("bread", "cake", "bread", "cake")) shop <- gl(2,2, labels=c("shop_1", "shop_2"))To answer the question "Which shop sells proportionally more bread?" I need to divide the revenue vector by the sum of revenue per shop, which can be calculated easily by
ave
:(shop_revenue <- ave(revenue, shop, FUN=sum))
# [1] 50 50 40 40
(revenue_split_in_shop <- revenue/shop_revenue)
# [1] 0.600 0.400 0.575 0.425 # Shop 1 sells more bread than cake
In other words, ave
has to split the revenue vector by shop and apply the sum
function to it. Well that's exactly what it does. Here is the source code of ave
:# Copyright (C) 1995-2012 The R Core Team
ave <- function (x, ..., FUN = mean)
{
if(missing(...))
x[] <- FUN(x)
else {
g <- interaction(...)
split(x,g) <- lapply(split(x, g), FUN)
}
x
}
However, and this is what intrigued me, if I don't provide a grouping variable (missing(...)
) it will apply the function FUN
on x
itself and write its output to x[]
. That's actually what the help file to ave
mentioned in its description. So what does it do? Here is an example again:ave(revenue, FUN=sum)
# [1] 90 90 90 90
I get the sum of revenue repeated as many time as the vector has elements, not just once, as with sum(revenue)
. The trick is that the output of FUN(x)
is written into x[]
, which of course is output of a function call itself "["(x). I think it is the following sentence in the help file of
"["
(see ?"["), which explains it: Subsetting (except by an empty index) will drop all attributes except names, dim and dimnames.So there we are. I feel less inclined to use
ave
more, as it is just short for the usual split, lapply
routine, but I learned something new about the subtleties of R.Doughnut chart in R with googleVis
The guys at Google continue to update and enhance the Chart Tools API. One new recent feature is a pie chart with a hole, or as some call them: donut charts.Thankfully the new functionality is being achieved through new options for the existing pie chart, which means that those new features are available in R via googleVis as well, without the need of writing new code.
Doughnut chart example
With the German election coming up soon, here is the composition of the current parliament.Session Info
R version 3.0.1 (2013-05-16)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
other attached packages:
[1] googleVis_0.4.5
loaded via a namespace (and not attached):
[1] RJSONIO_1.0-3 tools_3.0.1
1 comment :
Post a Comment