减少条形图中x轴刻度(标签)的数量

时间:2012-10-29 20:58:17

标签: r bar-chart lattice

我正在使用格子包中的条形图。我有10年的时间序列数据,我希望x轴以%b-%Y的格式显示,每隔六个月。这可以在xyplot(给定日期DateVector的向量)中完成,其语法如下:

scales=list(x=list(format = "%b-%Y",tick.number = length(DateVector)/2))

条形图忽略了设计因素的tick.number选项,因此x轴对于大量数据标签变得不可读。如何减少刻度和/或刻度标签的数量?

这是一个简单的例子,它重现了我的问题,数据跟随(保存数据为Testrr.csv运行,如果这是错误的格式,这是我第一次道歉;)

library(lattice)

inptTrans <- read.csv("Testrr.csv")
inptTrans$NotherTime <- as.Date(as.character(inptTrans$TransDateS),"%m/%d/%Y")
xyp2 <- barchart (NumE+NumF~ NotherTime, data=inptTrans, main = sprintf("Total")
                  ,type='r',xlab = '',ylab='',col=c('red','black')
                  ,horizontal=FALSE
                  ,scales=list(x=list( rot=45,cex=1.0 ,
                                 labels=format(inptTrans$NotherTime,"%b-%Y"),tick.number=2)
                     )
                  ,key=list(text = list(c("Num F","Num E"))
                     ,rectangle=list(col=c('black','red') ),columns = 2
                     ,corner = c(0.05,-0.11),lty = c(1),lwd=3)
                  ,stack=TRUE
                  )

png(sprintf('Testrr.png'),width = 900, height = 750)
print(xyp2) 
dev.off()

Testrr.csv:

TransDateS,NumTot,NumF,NumE
01/15/2003,339486,18478,293879
02/15/2003,343761,16430,295272
03/15/2003,413700,17924,356004
04/15/2003,432741,18260,377046
05/15/2003,465439,18721,406632
06/15/2003,490699,18276,424773
07/15/2003,507818,18354,440237
08/15/2003,506530,17391,437386
09/15/2003,481039,17809,411568
10/15/2003,483364,19507,412902
11/15/2003,392189,16308,329675
12/15/2003,444249,18342,367489
01/15/2004,364662,20009,308456
02/15/2004,389718,16894,329946
03/15/2004,511386,20207,434052
04/15/2004,525563,19867,452646
05/15/2004,538570,17557,463289
06/15/2004,620868,20386,535523
07/15/2004,581368,20844,500511
08/15/2004,580773,19687,495930
09/15/2004,523992,21322,442304
10/15/2004,507288,18907,427265
11/15/2004,489571,19135,409818
12/15/2004,510904,21213,419328
01/15/2005,419417,21930,351257
02/15/2005,446402,19600,374778
03/15/2005,581109,22655,486727
04/15/2005,574275,21263,487661
05/15/2005,617399,21033,524466
06/15/2005,688876,26999,584782
07/15/2005,610606,20712,516127
08/15/2005,670746,23171,562919
09/15/2005,601594,23769,499257
10/15/2005,537107,21057,446620
11/15/2005,517340,22378,421351
12/15/2005,507610,22002,403392
01/15/2006,409802,25032,334607
02/15/2006,429196,23383,350498
03/15/2006,567056,27528,461193
04/15/2006,502403,24994,415797
05/15/2006,578793,27765,480468
06/15/2006,603134,31641,501012
07/15/2006,507408,25796,423143
08/15/2006,557500,31435,460225
09/15/2006,475884,30448,386443
10/15/2006,469092,31648,385751
11/15/2006,432720,36363,349832
12/15/2006,422369,30619,335706
01/15/2007,365297,38993,302488
02/15/2007,372276,34855,308599
03/15/2007,455525,39038,377113
04/15/2007,431043,36892,363764
05/15/2007,473539,42371,401959
06/15/2007,483341,44540,408415
07/15/2007,441046,43735,373058
08/15/2007,446111,48509,375242
09/15/2007,341554,45252,283456
10/15/2007,365869,55746,304820
11/15/2007,333946,57399,274292
12/15/2007,309551,51137,252391
01/15/2008,270806,70554,229161
02/15/2008,289606,66395,245970
03/15/2008,328369,65904,279960
04/15/2008,353531,78510,308293
05/15/2008,375080,81284,328119
06/15/2008,390034,80175,342170
07/15/2008,378648,85689,334255
08/15/2008,363756,83357,321556
09/15/2008,350942,79301,309385
10/15/2008,330164,75568,293867
11/15/2008,252408,67388,222510
12/15/2008,296037,65057,261619
01/15/2009,222048,69380,201462
02/15/2009,247591,77532,224236
03/15/2009,305516,57897,277544
04/15/2009,322308,65778,295160
05/15/2009,335134,78854,305599
06/15/2009,386702,93204,353285
07/15/2009,391393,91153,358731
08/15/2009,361150,77043,329656
09/15/2009,360568,79893,327923
10/15/2009,374886,90766,339969
11/15/2009,342502,77895,305321
12/15/2009,330770,81255,300899
01/15/2010,238132,94309,220064
02/15/2010,261558,81167,241123
03/15/2010,363432,103052,335172
04/15/2010,385535,100984,355852
05/15/2010,381303,95408,350883
06/15/2010,416893,94812,376190
07/15/2010,297810,94574,278054
08/15/2010,313494,98536,291501
09/15/2010,301782,110154,280312
10/15/2010,279117,80204,260114
11/15/2010,270178,67700,250713
12/15/2010,301323,67770,279877
01/15/2011,232283,78998,219762
02/15/2011,236917,64257,223213
03/15/2011,312669,80275,295648
04/15/2011,317720,77881,301463
05/15/2011,332220,76017,315955
06/15/2011,364962,79413,347253
07/15/2011,320199,67812,305785
08/15/2011,352555,74725,337283
09/15/2011,316858,82664,303357
10/15/2011,293425,69684,281407
11/15/2011,279320,73735,267671
12/15/2011,295369,70498,282722
01/15/2012,238417,73051,229405
02/15/2012,267105,65015,256719
03/15/2012,328104,63709,315019
04/15/2012,330508,58175,318258
05/15/2012,369418,65886,356174
06/15/2012,361304,59515,348708
07/15/2012,305613,49700,295448
08/15/2012,227541,35801,219883

1 个答案:

答案 0 :(得分:4)

论证tick.number实际上只是关于放置刻度线的建议。在这种情况下,使用at参数可能会产生更一致的结果。

如果要绘制每个第六个标签,首先要创建一个矢量来索引此序列:

okLabs <- seq(1, nrow(inptTrans), by = 6)
okLabs
[1]   1   7  13  19  25  31  37  43  49  55  61  67  73  79  85  91  97 103 109 115

然后,您可以将okLabs传递给at参数,并将其用于labels的子集(此处scales列表已分配给您可以传递给的对象scales参数):

scalesList <- list(x = list(rot = 45, cex = 1.0,
    labels = format(inptTrans$NotherTime, "%b-%Y")[okLabs], at = okLabs))

barchart (NumE+NumF~ NotherTime, data=inptTrans, main = sprintf("Total")
              ,type='r',xlab = '',ylab='',col=c('red','black')
              ,horizontal=FALSE
              ,scales= scalesList
              ,key=list(text = list(c("Num F","Num E"))
                 ,rectangle=list(col=c('black','red') ),columns = 2
                 ,corner = c(0.05,-0.11),lty = c(1),lwd=3)
              ,stack=TRUE
              )

enter image description here

请注意,当您尝试绘制的数据中缺少(NA)值时,此代码无法正常工作。为此,您可以尝试省略缺少数据的行,并从该子集创建新的data.frame