Thanks for the report. This has bothered me too, but never enough to take a look. Seems like the solution could be as simple as setting major.ticks = "auto" and grid.ticks.on = "auto" as the plot.xts() defaults. It works for your example.
I agree with @joshuaulrich that setting the default arguments to "auto" for the grid and axis ticks is a good solution. The default is "months" which is only reasonable for several months of data on a daily or lower frequency.
plot.xts uses xts:::axTicksByTime2 which is a port from what is used in quantmod::chart_Series, also mentioned in #74.
rtsplot::rtsplot() uses graphics::axis.POSIXct(), which plot.xts() cannot use because of its different geometry. That said, we may be able to use a similar approach.
One possible problem: xts objects are often irregularly spaced, which means there could easily be no observations where you would want to place a tick mark based on the logic in graphics::axis.POSIXct(). This is why axTicksByTime() uses endpoints() to find tick mark locations.