Q:

Why can't I boxplot an xts directly? 

> x <- data.frame(a = rnorm(10), b = rnorm(10), c = rnorm(10))
> x
             a          b            c
1  -1.09651022 -0.7416278  0.209405373
2   1.53644398 -0.9463432  0.374955227
3   1.71132675 -0.3828052  2.024143398
4  -1.10622882 -0.3599187 -0.808780103
5  -0.49616562  0.7061180  0.644142118
6  -1.75452442  0.3890812 -0.623815889
7   0.06315648  0.5103820 -1.501873998
8   0.64856129 -1.0973679  1.432024595
9  -0.62828873 -0.3159317  0.183674189
10 -0.82657934  1.6376569 -0.003601196
> rownames(x) <- as. Date(Sys. Date() - 9:0)
> x
                     a          b            c
2013-06-07 -1.09651022 -0.7416278  0.209405373
2013-06-08  1.53644398 -0.9463432  0.374955227
2013-06-09  1.71132675 -0.3828052  2.024143398
2013-06-10 -1.10622882 -0.3599187 -0.808780103
2013-06-11 -0.49616562  0.7061180  0.644142118
2013-06-12 -1.75452442  0.3890812 -0.623815889
2013-06-13  0.06315648  0.5103820 -1.501873998
2013-06-14  0.64856129 -1.0973679  1.432024595
2013-06-15 -0.62828873 -0.3159317  0.183674189
2013-06-16 -0.82657934  1.6376569 -0.003601196
> class(x)
[1] "data.frame"
> boxplot(x)

> xx <- as.xts(x, order.by = as. Date(rownames(x)))
> xx
                     a          b            c
2013-06-07 -1.09651022 -0.7416278  0.209405373
2013-06-08  1.53644398 -0.9463432  0.374955227
2013-06-09  1.71132675 -0.3828052  2.024143398
2013-06-10 -1.10622882 -0.3599187 -0.808780103
2013-06-11 -0.49616562  0.7061180  0.644142118
2013-06-12 -1.75452442  0.3890812 -0.623815889
2013-06-13  0.06315648  0.5103820 -1.501873998
2013-06-14  0.64856129 -1.0973679  1.432024595
2013-06-15 -0.62828873 -0.3159317  0.183674189
2013-06-16 -0.82657934  1.6376569 -0.003601196
> class(xx)
[1] "xts" "zoo"
> boxplot(xx)
Error in try.xts(c(2.12199579096527e-314, 2.12199579096527e-314, 0, 2.12199579096527e-314,  : 
  Error in xts(coredata(x), order.by = index(x), .CLASS = "xts", ...) :   order.by requires an appropriate time-based object
> 

of course...
> boxplot(as.matrix(xx), col = "red")

Not a huge problem but I don't want to have to coerce my xts's every time, or more generally, I'd like to know what's going on here in case there are other issues which this might uncover. 

A:

An xts object is a matrix plus an index, so you can't just pass the object to boxplot().  If you look at str(xx):
# An ‘xts’ object from 2013-06-07 to 2013-06-16 containing:
#   Data: num [1:10, 1:3] 0.321 -0.462 1.715 0.575 0.83 ...
# - attr(*, "dimnames")=List of 2
# ..$ : NULL
# ..$ : chr [1:3] "a" "b" "c"
# Indexed by objects of class: [Date] TZ: 
#   xts Attributes:  
#   NULL

You can access the matrix through coredata():
coredata(xx)
#                a           b            c
# [1,]  0.32120813 -0.07370657 -0.601288169
# [2,] -0.46154742 -1.09475940  3.028664653
# [3,]  1.71515544 -0.31000454 -0.009281175
# [4,]  0.57482616 -0.06260991  1.198034802
# [5,]  0.83015688 -2.49614565 -1.689812377
# [6,]  0.01748081 -0.55332675  2.391426111
# [7,]  0.69852800 -0.10337251 -0.267939285
# [8,]  0.75139113 -0.17427970 -0.561434122
# [9,] -0.68942598  0.18685817 -1.508917140
# [10,] -0.76381007 -2.44387628  0.290524821

Which you can use directly however you would use a matrix:
boxplot(coredata(xx))

If you want to use the index of the xts object, you just use index():
index(xx)
# [1] "2013-06-07" "2013-06-08" "2013-06-09" "2013-06-10" "2013-06-11" "2013-06-12" "2013-06-13" "2013-06-14" "2013-06-15"
# [10] "2013-06-16"

A:

Because theres no boxplot.xts function.  Write it, and magically you can do boxplot(anxtsobject).  If the author of xts likes it, it might even get into the package.  Oh, that might only be true if xts are S3 classes...
Can you do hist(anxtsobject)? 

A:

You can use PerformanceAnalytics package like this for example:
library(PerformanceAnalytics)
chart. Boxplot(xx)

Internally , the xts object is coerced to a data.frame, then boxplot can be called:
library(PerformanceAnalytics)
R <- checkData(xx, method = "data.frame")
boxplot(R)

