[R] Split charts with ggplot2, tidyquant
Charlie Redmon
redmonc at gmail.com
Sun Jan 21 17:45:39 CET 2018
Thanks for the reminder about lattice! I did some searching and there's
a good example of manipulating the size of subplots using the `position`
argument (see pp. 202-203 in the Trellis Users Guide:
http://ml.stat.purdue.edu/stat695t/writings/Trellis.User.pdf). This is
not within the paneling environment with the headers like in other
trellis plots though, so you'll have to do a bit more digging to see how
to get that to work if you need those headers.
Best,
Charlie
On 01/20/2018 03:17 PM, Bert Gunter wrote:
> That (the need for base graphics) is false. It certainly **can** be
> done in base graphics -- see ?layout for a perhaps more
> straightforward way to do it along the lines you suggest.
>
> However both lattice and ggplot are based on grid graphics, which has
> a similar but slightly more flexible ?grid.layout function which would
> allow one to size and place subsequent ggplot or lattice graphs in an
> arbitrary layout as you have described (iiuc) for the base graphics case.
>
> Perhaps even simpler would be to use the "position" argument of the
> print.trellis() function to locate trellis plots. Maybe ggplot() has
> something similar.
>
> In any case, the underlying grid graphics functionality allows
> **much** greater fine control of graphical elements (including
> rotation, for example) -- at the cost of greater complexity. I would
> agree that doing it from scratch using base grid functions is most
> likely overkill here, though. But it's there.
>
> IMHO only, the base graphics system was great in its time, but its
> time has passed. Grid graphics is much more powerful because it is
> objects based -- that is, grid graphs are objects that can be saved,
> modified, and even interacted with in flexible ways. Lattice and
> ggplot incarnations take advantage of this, giving them more power and
> flexibility than the base graphics capabilities can muster.
>
> I repeat -- IMHO only! Feel free to disagree. I don't want to start
> any flame wars here.
>
> Cheers,
> Bert
>
>
>
>
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along
> and sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>
> On Sat, Jan 20, 2018 at 12:19 PM, Charlie Redmon <redmonc at gmail.com
> <mailto:redmonc at gmail.com>> wrote:
>
> For this kind of control you will probably need to move to base
> graphics
> and utilize the `fig` argument in par(), in which case you would
> want to
> run the plot() command twice: once with your first outcome and
> once with
> your second, changing the par() settings before each one to
> control the
> size.
>
>
> On 01/19/2018 01:39 PM, Eric Berger wrote:
> > Hi Charlie,
> > Thanks. This is helpful. As mentioned in my original question, I
> want
> > to be able to plot a few such charts on the same page,
> > say a 2 x 2 grid with such a chart for each of 4 different stocks.
> > Using your solution I accomplished this by making
> > a list pLst of your ggplots and then calling cowplot::plot_grid(
> > plotlist=pLst, nrow=2, ncol=2 ) That worked fine.
> >
> > The one issue I have is that in the ggplot you suggest, the
> price and
> > volume facets are the same size. I would like them to be
> different sizes
> > (e.g. the volume facet at the bottom is generally shown smaller than
> > the facet above it in these types of charts.)
> >
> > I tried to find out how to do it but didn't succeed. I found a
> couple
> > of relevant discussions (including Hadley writing that he did not
> > think it was a useful feature. :-()
> >
> > https://github.com/tidyverse/ggplot2/issues/566
> <https://github.com/tidyverse/ggplot2/issues/566>
> >
> > and an ancient one where someone seems to have been able to get a
> > heights parameter working in a call to facet_grid but it did not
> work
> > for me.
> >
> https://kohske.wordpress.com/2010/12/25/adjusting-the-relative-space-of-a-facet-grid/
> <https://kohske.wordpress.com/2010/12/25/adjusting-the-relative-space-of-a-facet-grid/>
> >
> > Thanks again,
> > Eric
> >
> > p.s. Joshua thanks for your suggestions, but I was hoping for a
> ggplot
> > solution.
> >
> >
> > On Fri, Jan 19, 2018 at 6:33 PM, Charlie Redmon
> <redmonc at gmail.com <mailto:redmonc at gmail.com>
> > <mailto:redmonc at gmail.com <mailto:redmonc at gmail.com>>> wrote:
> >
> > So the general strategy for getting these into separate
> panels in
> > ggplot is to have a single variable that will be your
> response and
> > a factor variable that indexes which original variable it came
> > from. This can be accomplished in many ways, but the way I
> use is
> > with the melt() function in the reshape2 package.
> > For example,
> >
> > library(reshape2)
> > plotDF <- melt(SPYdf,
> > id.vars="Date", # variables to replicate
> > measure.vars=c("close", "volume"), #
> > variables to create index from
> > variable.name <http://variable.name>
> <http://variable.name>="parameter", # name of new
> > variable for index
> > value.name <http://value.name> <http://value.name>="resp") #
> name of what will be your
> > response variable
> >
> > Now the ggplot2 code:
> >
> > library(ggplot2)
> > ggplot(plotDF, aes(x=Date, y=resp)) +
> > facet_wrap(~parameter, ncol=1, scales="free") +
> > geom_line()
> >
> >
> > Hope that does the trick!
> >
> > Charlie
> >
> >
> >
> > On 01/18/2018 02:11 PM, Eric Berger wrote:
> >
> > Hi Charlie,
> > I am comfortable to put the data in any way that works best.
> > Here are two possibilities: an xts and a data frame.
> >
> > library(quantmod)
> > quantmod::getSymbols("SPY") # creates xts variable SPY
> > SPYxts <- SPY[,c("SPY.Close","SPY.Volume")]
> > SPYdf <-
> >
> data.frame(Date=index(SPYxts),close=as.numeric(SPYxts$SPY.Close),
> > volume=as.numeric(SPYxts$SPY.Volume))
> > rownames(SPYdf) <- NULL
> >
> > head(SPYxts)
> > head(SPYdf)
> >
> > # SPY.Close SPY.Volume
> > #2007-01-03 141.37 94807600
> > #2007-01-04 141.67 69620600
> > #2007-01-05 140.54 76645300
> > #2007-01-08 141.19 71655000
> > #2007-01-09 141.07 75680100
> <tel:07%C2%A0%20%C2%A075680100>
> > #2007-01-10 141.54 72428000
> >
> > # Date close volume
> > #1 2007-01-03 141.37 94807600
> > #2 2007-01-04 141.67 69620600
> > #3 2007-01-05 140.54 76645300
> > #4 2007-01-08 141.19 71655000
> > #5 2007-01-09 141.07 75680100 <tel:07%2075680100>
> > #6 2007-01-10 141.54 72428000
> >
> > Thanks,
> > Eric
> >
> >
> >
> > On Thu, Jan 18, 2018 at 8:00 PM, Charlie Redmon
> > <redmonc at gmail.com <mailto:redmonc at gmail.com>
> <mailto:redmonc at gmail.com <mailto:redmonc at gmail.com>>
> > <mailto:redmonc at gmail.com <mailto:redmonc at gmail.com>
> <mailto:redmonc at gmail.com <mailto:redmonc at gmail.com>>>> wrote:
> >
> > Could you provide some information on your data
> structure
> > (e.g.,
> > are the two time series in separate columns in the
> data)? The
> > solution is fairly straightforward once you have the
> data
> > in the
> > right structure. And I do not think tidyquant is
> necessary for
> > what you want.
> >
> > Best,
> > Charlie
> >
> > -- Charles Redmon
> > GRA, Center for Research Methods and Data Analysis
> > PhD Student, Department of Linguistics
> > University of Kansas
> > Lawrence, KS, USA
> >
> >
> >
> > --
> > Charles Redmon
> > GRA, Center for Research Methods and Data Analysis
> > PhD Student, Department of Linguistics
> > University of Kansas
> > Lawrence, KS, USA
> >
> >
>
> --
> Charles Redmon
> GRA, Center for Research Methods and Data Analysis
> PhD Student, Department of Linguistics
> University of Kansas
> Lawrence, KS, USA
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org <mailto:R-help at r-project.org> mailing list --
> To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> <https://stat.ethz.ch/mailman/listinfo/r-help>
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> <http://www.R-project.org/posting-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>
>
--
Charles Redmon
GRA, Center for Research Methods and Data Analysis
PhD Student, Department of Linguistics
University of Kansas
Lawrence, KS, USA
More information about the R-help
mailing list