Thanks a lot for this incredibly helpful and thorough reply.
I had actually meant to cut out the scales part before sending the email,
very sorry about the confusion, so I was actually executing just

xyplot(Comp ~ time | PC ,data = Xlong, pane1l = WeekhourPanel)

The scales part was a later attempt to control the axis directly which I
eventually abandoned. (partly because I actually wanted the HOUR variables
to be local to the panel function)
and yes, in this simplified version I asked for labels only at 8am which
formats to "08". My intention was to add more hours and weekly labels once I
figure out this simple axis first.

I had hoped to define a panel function that draws only one PC at a time
since I envision that grouping variable to have many levels (two were just
an example).

Might you know how to disable the axis drawing in panel.xyplot ?

Thanks !

Markus


On Fri, Sep 10, 2010 at 12:45 PM, Dennis Murphy <djmu...@gmail.com> wrote:

> Hi:
>
> On Fri, Sep 10, 2010 at 7:16 AM, Markus Loecher 
> <markus.loec...@gmail.com>wrote:
>
>> Dear all,
>> I am struggling to modify the axis labels/ticks in a panel provided to
>> xyplot.
>> To begin with, I do not know the equivalent of the xaxt="n" directive for
>> panels that would set the stage for no default x axis being drawn.
>> My goal is to draw ticks and custom formatted labels at certain hours of
>> the
>> week.
>> When I execute the code below, I get an error message in the plot window
>> that suggests a problem with some args parameter.
>>
>> A second problem concerns the shaded rectangles I try to draw. Clearly,
>> the
>> range returned by par('usr') does not correspond to the true y ranges.
>>
>> Any help would be greatly appreciated,
>>
>> Thanks,
>>
>> Markus
>>
>> PS I am using R version 2.10.0 on MACOS and the lattice package version
>> 0.18-3 (latest)
>>
>> ------------------------------------------------------------------------------------
>> library(lattice);
>>
>> #multivariate time series, one row for each hour of the week:
>> Xwide = cbind.data.frame(time=as.POSIXct("2010-09-06 00:00:00 EDT") +
>> (0:167)*3600, Comp.1= sin(2*pi*7*(0:167)/168), Comp.2 =
>> cos(2*pi*7*(0:167)/168));
>> #to pass this to xyplot, first need to reshape:
>> Xlong <- reshape(Xwide, varying = c(2:3), idvar = "time",
>> direction="long",
>> timevar = "PC");
>> #get descriptive shingle labels
>> Xlong[,"PC"] <- factor(Xlong[,"PC"], labels = paste("PC",1:2));
>>
>
> A less mentally taxing approach :)
>
> library(reshape)
> xlong <- melt(Xwide, id = 'time')
> names(xlong)[2:3] <- c('PC', 'Comp')
>
>>
>> xyplot(Comp ~ time | PC ,data = Xlong, pane1l = WeekhourPanel, scales =
>> list(x=list(at = Hours24-4*3600,
>> labels=as.character(format(Hours24-4*3600,"%H")))));
>>
>
> When attempting to run this, I got
> Error in xyplot.formula(Comp ~ time | PC, data = Xlong, pane1l =
> WeekhourPanel,  :
>   object 'Hours24' not found
>
> Attempting to pull Hours24 out of the function didn't work...
>
> > Hours24 <- seq(r[1]+12*3600, r[2], by=24*3600)
> Error in seq(r[1] + 12 * 3600, r[2], by = 24 * 3600) :
>   object 'r' not found
>
> One problem is that to use Hours24 in scales, it has to be defined in the
> calling environment of xyplot() - in other words, it has to be defined
> outside the panel function and outside of xyplot() if your present code is
> to have any hope of working.
>
> I think I got that part figured out: in the console, type
> r <- range(Xwide$time)
>
> Hours24 <- seq(r[1]+12*3600, r[2], by=24*3600)
>
> I at least get a plot now by running your xyplot() function with the panel
> function, but all the labels are 08 on the x-axis. Here's why:
>
>
> format(Hours24-4*3600,"%H")
> [1] "08" "08" "08" "08" "08" "08" "08"
>
> This comes from the labels = part of your panel function. I got the same
> plot with this code (apart from adding the lines):
> xyplot(Comp ~ time | PC ,data = Xlong, type = 'l',
>     scales =list(x = list(at = Hours24-4*3600,
>
> labels=as.character(format(Hours24-4*3600,"%H")))))
>
> which indicates that something in your panel function is awry.
>
> I'd suggest starting out simply. Put both plots on the same panel  using PC
> as a grouping variable in the long data frame. It will automatically use
> different colors for groups, but you can control the line color with  the
> col.lines = argument; e.g., col.lines = c('red', 'blue'). Next, I'd work on
> getting the axis ticks and labels the way you want with scales. It also
> appears that you want to set a custom grid - my suggestion would be to do
> that last, after you've controlled the axis ticks and labels. Once you have
> that figured out, you have the kernel of your panel function. In most
> applications I've seen in lattice, the idea is to keep the panel function as
> simple as possible and pass the 'global' stuff to the function call. There's
> something broken in your panel function, but it's a run-time error rather
> than a compile-time error, so you can either debug it or try simplifying the
> problem (and the panel function) as much as possible.
>
> HTH,
> Dennis
>
> WeekhourPanel <- function(x,y,...){
>>  r <- range(x);
>>  #print(r)
>>  Hours8 <- seq(r[1], r[2], by=8*3600);
>>  Hours24 <- seq(r[1]+12*3600, r[2], by=24*3600)
>>  #axis.POSIXct(1, at= Hours8, format="%H");
>>  panel.xyplot(x,y, type="l", ...);
>>  panel.grid(0,3);
>>  panel.abline(v= Hours24-4*3600, lty=2, col = rgb(0,0,1,0.5));
>>  panel.abline(v=Hours24+6*3600, lty=2, col = rgb(0,1,0,0.5));
>>  bb <- par('usr')
>>  y0 <- bb[3];
>>  for (i in seq(r[1], r[2], by=48*3600)) panel.rect(xleft=i, ybottom=y0,
>> xright=i+24*3600-1, ytop=bb[4], col = rgb(0.75,0.75,0.75,0.3), border =
>> NA);
>>  panel.axis(1, at= Hours24-4*3600,
>> labels=as.character(format(Hours24-4*3600,"%H")));
>>  #panel.axis(1, at= Hours24+6*3600, labels=format(x,"%H"));
>>  #panel.axis(3, at= Hours24, labels=format(x,"%a"), line = -1, tick =
>> FALSE);
>>
>> }
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help@r-project.org mailing list
>> 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.
>>
>
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to