2015-11-20 2 views
3

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

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

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)) 

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

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 

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

ответ

1

Вы преобразовываете 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) 
    }) 
+0

спасибо. Теперь я понимаю, что переменные оси x рассматриваются как уровни фактора (т. Е. 1, 2, 3 и т. Д.), А не значение, которое показано на графике. Поэтому, когда мне нужно добавить строку к моим фактическим данным, я использую номер фактора, а не значение на оси. – user41509

1
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)}) 

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

enter image description here

+0

'barchart' может принимать аргумент' data', поэтому имена переменных могут быть указаны без указания на объект 'data $' – jangorecki

 Смежные вопросы

  • Нет связанных вопросов^_^