[R] lattice xyplot point labelling

maxbre mbressan at arpa.veneto.it
Wed Feb 27 13:30:22 CET 2013


This is my reproducible example

tv.ms<-structure(list(inq = structure(4:17, .Label = c("D4", "D5", "D6a", 
"D6b", "D6c", "D7", "D8", "F4", "F5a", "F5b", "F6a", "F6b", "F6c", 
"F6d", "F7a", "F7b", "F8"), class = "factor"), tv.km.median.iteq =
c(0.320000000000004, 
0.239999999999998, 0.240000000000002, 0.0800000000000001, 0.989999999999995, 
0.309999999999999, 4.47000000000003, 0.620000000000005, 0.620000000000005, 
0.18, 0.790000000000006, 0.32, 0.0200000000000005, 0.01), ms.km.median.iteq
= c(0.420000000000002, 
0.380000000000001, 0.33, 0.0900000000000001, 1.06999999999994, 
0.559999999999974, 5.20000000000027, 1.5, 1.19, 0.469999999999999, 
0.310000000000002, 0.459999999999999, 0.0400000000000003, 0.04
), type = c("PCDD", "PCDD", "PCDD", "PCDD", "PCDF", "PCDF", "PCDF", 
"PCDF", "PCDF", "PCDF", "PCDF", "PCDF", "PCDF", "PCDF")), .Names = c("inq", 
"tv.km.median.iteq", "ms.km.median.iteq", "type"), row.names = 4:17, class =
"data.frame")


I worked out the chart mainly with the hints of this great forum (thanks
again for that): what I’ve done so far accomplishes my needs except for that
now I need a little final tweaking in order to avoid the overlapping of some
specific labels (i.e. by looking at the plot the labels: F6b and F6a, F7a
and F5a)


xyplot(tv.km.median.iteq~ms.km.median.iteq|type, data=tv.ms,
        layout=c(1,2),
        aspect="xy", 
        xlab = expression(paste('ms [ fg/', m^3, ' ]', sep = '')), 
        ylab = expression(paste('tv [ fg/', m^3, ' ]', sep = '')), 
        scales= list(relation="free", log=10, cex=0.8), 
        
       prepanel = function(x, y, subscripts) { 
          rr<- range(cbind(x,y)) 
          list(xlim = rr, ylim= rr) 
        }, 
        panel = function(x, y , subscripts,...) { 
          panel.xyplot(x, y, cex=0.8,...) 
          panel.abline(a = 0, b = 1, lty = 2, col ="gray") 
          panel.text(x, y, labels=tv.ms$inq[subscripts], 
                     cex = 0.7, pos=3, offset=1, srt=0, adj=c(1,1))
          #alternative to the use of panel.text
          #ltext(x=x, y=y, labels=tv.ms$inq[subscripts], pos=1, cex=0.8)
        }, 
        #subscripts=TRUE, 
        xscale.components = function(...)  { 
          ans <- xscale.components.logpower(...) 
          range <- ans$num.limit 
          newtck <- round(seq(range[1],range[2],l=7),1) 
          ans$bottom$ticks$at <- newtck 
          ans$bottom$labels$at <- newtck 
          ans$bottom$labels$labels <-parse(text=paste('10^',newtck,sep='')) 
          ans 
        } , 
        yscale.components  = function(...)  { 
          ans <- yscale.components.logpower(...) 
          range <- ans$num.limit 
          newtck <- round(seq(range[1],range[2],l=7),1) 
          ans$left$ticks$at <- newtck 
          ans$left$labels$at <- newtck 
          ans$left$labels$labels <-parse(text=paste('10^',newtck,sep='')) 
          ans 
        }
)

I’m thinking to sort out the problem by:
1 -	plotting all labels except for those overlapping (i.e the above
mentioned points);
2 -	plotting the remaining labels (i.e. the overlapping ones) by introducing
a “manual displacement”;

I know that’s probably not much efficient nor elegant resorting to a “manual
solution” involving at least two “plotting steps” (the first to see where to
tweak and the second to fix) but I can’t think to any other solution

Any help?

Thank you

max




--
View this message in context: http://r.789695.n4.nabble.com/lattice-xyplot-point-labelling-tp4659798.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list