Добавить две вертикальные линии в виде диаграммы

Я пытаюсь добавить две вертикальные линии к диаграмме, которую я сделал, но у меня проблемы.

Примеры данных

data<-data.frame(area=rep(c("ES","OC","VB"),each=2,times=2),num=c(0,10,23,40,25,60,80,45,10,25,10,0),
    bin=rep(c(85,90),times=3))

код диаграммы Большая часть кода форматирования предназначена для фактического набора данных.

require(lattice)         
barchart(num~as.factor(bin), data=data,col=c("black","lightslategray","light gray"),
    groups = area, stack = F, horizontal=F,xlab="Shell Length (mm)",ylab="Frequency (N)",
    scales=list(y=list(alternating=1,tck=-1,limits=c(0,400),
    at=c(0,50,100,150,200,250,300,350,400),
    labels=c("0","50","100","150","200","250","300","350","400"),relation="same")),
    par.settings = list( grid.pars = list(fontfamily = 'serif'),axis.line=list(col=0)),
    panel = function(...) {
           lims<-current.panel.limits()
             panel.barchart(...)
           panel.abline(v=as.factor(80),col="red",lty=2)
           panel.abline(v=as.factor(90),h=0,col="black")
           panel.abline(h=lims$ylim[1],v=lims$xlim[1])
           panel.text(25,200,"OC (N = 1,947)",col="black",cex=.8)
           panel.text(25,185,"ES (N = 2,623)",col="lightslategray",cex=.8)
           panel.text(25,170,"VB (N = 2,780)",col="light gray",cex=.8)
      })

Когда я запускаю код одной вертикальной линии на графике, но вторая строка не отображается. Независимо от того, какое значение я поставил как v, одна строка не меняет положение.

R информация

R version 3.2.1 (2015-06-18)
Platform: i386-w64-mingw32/i386 (32-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets 
[7] methods   base     

other attached packages:
 [1] plyr_1.8.3          Hmisc_3.17-0        ggplot2_1.0.1      
 [4] Formula_1.2-1       survival_2.38-1     car_2.0-26         
 [7] MASS_7.3-40         xlsx_0.5.7          xlsxjars_0.6.1     
[10] rJava_0.9-7         latticeExtra_0.6-26 RColorBrewer_1.1-2 
[13] lattice_0.20-31 

Любая помощь будет оценена. Спасибо

2 ответа

Решение

Вы конвертируете bin к фактору в начале вашего кода (хотя он будет приведен к фактору, даже если вы этого не сделаете), создавая категориальную ось с неявными первичными тиковыми координатами 1 и 2 в качестве центра каждой группы баров, а не 85 и 90, как вы ожидали. Посмотрите, например, что происходит, когда вы меняете свой код следующим образом:

       panel.abline(v=1,col="red",lty=2)
       panel.abline(v=2,h=0,col="black")
       panel.abline(h=lims$ylim[1],v=lims$xlim[1])
       panel.text(1,200,"OC (N = 1,947)",col="black",cex=.8)
       panel.text(1.5,185,"ES (N = 2,623)",col="lightslategray",cex=.8)
       panel.text(2,170,"VB (N = 2,780)",col="light gray",cex=.8)
     })
barchart(data$num~as.factor(data$bin), groups=data$area, 
panel=function(x,y,...){ 
       panel.barchart(x,y,...) 
       panel.abline(v=1,col.line="red",lty=3)
       panel.abline(v=2,col.line="blue",lty=2)})

Выше должно сделать это.

Другие вопросы по тегам