Slight modification to have the xaxt ticks and labels only appear on the bottom chart
par(mfrow=c(3,1)) plot(DAX.[, 1], log='y', ylab='DAX', xaxt="n") plot(DAX.[, 2], ylab='vel (%)', xaxt="n") plot(DAX.[, 3], ylab='accel (%)') On Tue, May 30, 2023 at 6:23 PM Eric Berger <ericjber...@gmail.com> wrote: > > What if you just precede these commands as follows: > > par(mfrow=c(3,1)) > plot(DAX.[, 1], log='y', ylab='DAX') > plot(DAX.[, 2], ylab='vel (%)') > plot(DAX.[, 3], ylab='accel (%)') > > On Tue, May 30, 2023 at 5:45 PM Spencer Graves > <spencer.gra...@effectivedefense.org> wrote: > > > > > > > > On 5/30/23 8:48 AM, Eric Berger wrote: > > > I am a bit confused as to what you are trying to achieve - and even > > > if I could guess it is not clear what the interpretation would be. > > >> head(DAX) > > > 1628.75 1613.63 1606.51 1621.04 1618.16 1610.61 > > > > > > Including the leading NA's, what would be the 6 leading terms of the 3 > > > series that you want to plot, > > > and what would be the Y labels that you want to appear at those levels > > > (assuming that there was a > > > Y label for each of them - just to understand the units you are talking > > > about) > > > > > > DAX <- EuStockMarkets[, 'DAX'] > > DAX. <- cbind(DAX, diff(log(DAX)), diff(diff(log(DAX)))) > > colnames(DAX.) <- c("DAX", 'vel (%)', 'accel (%)') > > head(DAX.) > > > > > > DAX exhibits growth that is roughly exponential, so I want to > > plot it > > on a log scale: > > > > > > plot(DAX.[, 1], log='y', ylab='DAX') > > plot(DAX.[, 2], ylab='vel (%)') > > plot(DAX.[, 3], ylab='accel (%)') > > > > > > This is what I want as three panels of a single plot. > > > > > > I think I could get it by modifying the code for plot.ts so it > > accepted ylab as a vector, etc., as I previously mentioned. > > > > > > What do you think? > > Thanks, > > Spencer Graves > > > > > > > > > On Tue, May 30, 2023 at 4:06 PM Spencer Graves > > > <spencer.gra...@effectivedefense.org> wrote: > > >> > > >> > > >> > > >> On 5/30/23 6:16 AM, Eric Berger wrote: > > >>> My code assumes that DAX is a ts object, as in your original post. > > >>> > > >>> On Tue, May 30, 2023 at 2:06 PM Eric Berger <ericjber...@gmail.com> > > >>> wrote: > > >>>> > > >>>> Untested but why not > > >>>> > > >>>> a <- cbind(log(DAX), exp(diff(log(DAX))), exp(diff(diff(log(DAX))))) > > >>>> colnames(a) <- c("logDAX", "vel", "accel") > > >>>> plot(a) > > >> > > >> > > >> Progress, but we're not there yet. > > >> > > >> > > >> a <- cbind(DAX, exp(diff(log(DAX))), exp(diff(diff(log(DAX))))) > > >> colnames(a) <- c("logDAX", "vel", "accel") > > >> plot(a) > > >> plot(a, axes=FALSE, log='y') > > >> axis(1) > > >> axis(2) > > >> > > >> > > >> How do I get each y axis labeled in its original units? I > > >> can use > > >> pretty to get where I want tick marks, but I don't know where to place > > >> them "at" in calling axis(2, at= ___)? > > >> > > >> > > >> (axlb1 <- pretty(range(a[, 1]))) > > >> (axlb2 <- pretty(range(log(a[, 2]), na.rm=TRUE))) > > >> (axlb3 <- pretty(range(log(a[, 3]), na.rm=TRUE))) > > >> > > >> > > >> This suggests I write my own modification of plot.ts that > > >> accepts log > > >> as a character vector of length = ncol of the ts being plotted and > > >> returns invisibly a list with the default "at" and "label" arguments > > >> required to produce the default labeling. Then a user who wants a log > > >> scale for some but not all variables can get that easily and can further > > >> modify any of those scales further if they don't like the default. > > >> > > >> > > >> ??? > > >> Thanks very much. > > >> Spencer Graves > > >>>> > > >>>> > > >>>> On Tue, May 30, 2023 at 1:46 PM Spencer Graves > > >>>> <spencer.gra...@effectivedefense.org> wrote: > > >>>>> > > >>>>> > > >>>>> > > >>>>> On 5/29/23 2:37 AM, Eric Berger wrote: > > >>>>>> How about this: > > >>>>>> > > >>>>>> a <- cbind(AirPassengers, diff(log(AirPassengers)), > > >>>>>> diff(diff(log(AirPassengers)))) > > >>>>>> colnames(a)[2:3] <- c("percent increase", "acceleration") > > >>>>>> plot(a, xlab="year", main="AirPassengers") > > >>>>> > > >>>>> > > >>>>> My real problem is more difficult: I'm analyzing CO2 > > >>>>> data from Our > > >>>>> World in Data (https://ourworldindata.org/co2-emissions), and I need > > >>>>> to > > >>>>> plot the CO2 data on a log scale but velocity and acceleration on > > >>>>> linear > > >>>>> scales. The following is comparable: > > >>>>> > > >>>>> > > >>>>> str(DAX <- EuStockMarkets[, 'DAX']) > > >>>>> str(DAX. <- cbind(DAX, diff(log(DAX)), > > >>>>> diff(diff(log(DAX))))) > > >>>>> colnames(DAX.)[2:3] <- c('vel', 'accel') > > >>>>> plot(DAX.) > > >>>>> > > >>>>> > > >>>>> I want the first of the three panels to plot on the log > > >>>>> scale, but > > >>>>> the other two on linear scales. The obvious attempt does not work: > > >>>>> > > >>>>> > > >>>>> plot(DAX., log=c('y', '', '')) > > >>>>> #Error in length(log) && log != "" : > > >>>>> # 'length = 3' in coercion to 'logical(1)' > > >>>>> > > >>>>> > > >>>>> Trying to construct my own axes isn't easy, either: > > >>>>> > > >>>>> > > >>>>> str(logDAX <- cbind(log(DAX), diff(log(DAX)), > > >>>>> diff(diff(log(DAX))))) > > >>>>> colnames(logDAX) <- c('logDAX', 'vel', 'accel') > > >>>>> plot(logDAX, axes=FALSE) > > >>>>> axis(1) > > >>>>> axis(2) > > >>>>> > > >>>>> > > >>>>> I'm thinking of creating my own copy of "plot.ts", and > > >>>>> changing it so > > >>>>> it accepts the "log" argument as a vector of length equal to ncol of > > >>>>> the > > >>>>> ts object to be plotted AND returning an object that would allow a > > >>>>> user > > >>>>> to call "axis" ncol times. > > >>>>> > > >>>>> > > >>>>> Suggestions? > > >>>>> > > >>>>> > > >>>>> Thanks, > > >>>>> Spencer Graves > > >>>>> > > >>>>>> > > >>>>>> HTH, > > >>>>>> Eric > > >>>>>> > > >>>>>> > > >>>>>> On Mon, May 29, 2023 at 7:57 AM Spencer Graves > > >>>>>> <spencer.gra...@effectivedefense.org> wrote: > > >>>>>>> > > >>>>>>> Hello, All: > > >>>>>>> > > >>>>>>> > > >>>>>>> I want to plot level, velocity, and acceleration in > > >>>>>>> three panels with > > >>>>>>> only one x axis. The code below does this using "layout". > > >>>>>>> However, I > > >>>>>>> want the three plot areas to be of equal size, and this won't do > > >>>>>>> that: > > >>>>>>> If I stretch the plot vertically, the relative sizes of the three > > >>>>>>> panels > > >>>>>>> changes. There's probably a way to do this with ggplot2, but I > > >>>>>>> have yet > > >>>>>>> to find it. > > >>>>>>> > > >>>>>>> > > >>>>>>> Suggestions? > > >>>>>>> Thanks, > > >>>>>>> Spencer Graves > > >>>>>>> > > >>>>>>> > > >>>>>>> str(AirTime <- as.numeric(time(AirPassengers))) > > >>>>>>> str(AP <- as.numeric(AirPassengers)) > > >>>>>>> > > >>>>>>> def.par <- par(no.readonly = TRUE) # save default, for resetting... > > >>>>>>> (mat3x1 <- matrix(1:3, 3)) > > >>>>>>> plot3x1 <- layout(mat3x1, heights=c(1.4, 1, 1.5)) > > >>>>>>> layout.show(plot3x1) > > >>>>>>> > > >>>>>>> par(mar=c(0, 4.1, 4.1, 2.1)) > > >>>>>>> plot(AirTime, AP, log='y', type='l', axes=FALSE, > > >>>>>>> main='AirPassengers', ylab='AirPassengers') > > >>>>>>> box(col='grey') > > >>>>>>> axis(2, las=1) > > >>>>>>> > > >>>>>>> par(mar=c(0, 4.1, 0, 2.1)) > > >>>>>>> vAP <- diff(log(AP)) > > >>>>>>> plot(tail(AirTime, -1), vAP, type='l', > > >>>>>>> ylab='percent increase', axes=FALSE) > > >>>>>>> box(col='grey') > > >>>>>>> axis(2, las=1) > > >>>>>>> > > >>>>>>> par(mar=c(5.1, 4.1, 0, 2.1)) > > >>>>>>> plot(tail(AirTime, -2), diff(vAP), type='l', > > >>>>>>> ylab='acceleration', xlab='year', > > >>>>>>> las=1) > > >>>>>>> box(col='grey') > > >>>>>>> > > >>>>>>> par(def.par) > > >>>>>>> > > >>>>>>> ______________________________________________ > > >>>>>>> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > > >>>>>>> https://stat.ethz.ch/mailman/listinfo/r-help > > >>>>>>> PLEASE do read the posting guide > > >>>>>>> http://www.R-project.org/posting-guide.html > > >>>>>>> and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.