[R] Split charts with ggplot2, tidyquant
Eric Berger
ericjberger at gmail.com
Fri Jan 19 20:39:43 CET 2018
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
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/
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> 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="parameter", # name of new variable
> for index
> 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.Cl
>> ose),
>> 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
>> #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
>> #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>> 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
>
>
[[alternative HTML version deleted]]
More information about the R-help
mailing list