【问题标题】:R lattice x-axis tick marks spacingR点阵x轴刻度线间距
【发布时间】:2014-07-29 12:18:58
【问题描述】:

根据日期绘制一些值,例如

01/31/1996      -7.3667
02/29/1996       0.9413
03/31/1996       9.3252
04/30/1996       0.3147
05/31/1996       8.8593
06/30/1996      10.0297
07/31/1996       0.64i3
08/31/1996       2.1397
09/30/1996       0.6759
10/31/1996      -1.5579
11/30/1996       2.9493
....             ....
goes on till 2012 Nov

在 R lattice 中使用条形图,我得到了一个外观合理的图形,但 x 轴上的标签都被挤在一起,看起来就像一个巨大的文本球。我认为它以文字形式从上面输出每个日期,并试图将其全部放入空间中,但我真正想要的是 4 年或 5 个刻度标记增量,例如 4 年

1996            20000            2004            2008            2012 

均匀分布

我不确定这些日期是如何解释的,因此仅使用 tick.marks=5 或 scales=list(x=list(at=seq(1996,2012,4) ) 不起作用。我还尝试了跟随,但刻度线不均匀(有时是 4 年,有时是 5 年),并不真正对应实际数据的确切位置。

> df <- data.frame(x=paste0(rep(1996:2012, each=12), paste0("Q", 1:12)), y=1:204)
> x.tick.number <- 10
> x.tick.number <- 8
> at <- seq(1, nrow(df), length.out=x.tick.number)
> labels <- round(seq(1996, 2012, length.out=x.tick.number))
> barchart(V3~V1,  data = differences,col=c("green3"),origin=0,box.ratio=40, lty=0,reference=TRUE,stack=TRUE,main ="testing",ylab = list("values", cex=1.3), xlab = list
("dates",cex=1.3),par.settings=list (axis.text=list(cex=1.5), axis.line = list(lwd=3)),scales=list(y=list(tick.number=8, rot=90 ), x=list(at=at, labels=labels)))

还有其他建议吗?此外,我在 y 轴上有从 -25 到 20 的日期范围,刻度线以 5 为增量,但我希望每个刻度线中有 5 个较小的刻度线。我该如何控制这个。谢谢。

【问题讨论】:

    标签: r rstudio lattice


    【解决方案1】:

    我假设您将每个月绘制为不同的条形图,并且每个月都包含在 hte 数据中。如果是这样,我认为您可以这样做:

    My_at<-c(6,54,102,150,198)
    

    这意味着 1996 年、2000 年、2004 年、2008 年和 2012 年 6 月

    然后在barchart函数中:

    scales=list(x=list(at=at,labels=c("1996","2000","2004","2008","2012")))
    

    如果没有可重现的示例,我无法对此进行测试 - 但这是基本思想。

    如果您没有每个月的数据,则需要相应地更改 at 中的值。

    编辑以响应 cmets

    labels 论证中的数字(例如“2000”、“2004”等)只是用于刻度标签的文本,可以根据需要进行更改。放置在“My_at”中的值只是柱号 - 所以 6 表示将刻度标签放在第 6 根柱下方,54 是第 54 根柱,依此类推。如果需要,您可以在拥有数据的位置(例如第 500 条)之外放置标签。要将最后一个刻度向左移动,只需减少最后一个数字。我把它设为 192 而不是 198 对应的 2012 年 1 月。

    最后绘制刻度线使用:

    scales=list(x=list(at=at,labels=c("1996","2000","2004","2008","2012"), draw=TRUE,
                  tck=2 ))
    

    draw=TRUE 表示应绘制标签和刻度线,tck=2 控制刻度线的长度。您可以尝试不同的值来找到您喜欢的值。

    【讨论】:

    • 谢谢,("1996","2000","2004","2008","2012") 中的数字代表什么。
    • 现在看起来好多了,从 1996 年开始到 2012 年结束,但数据到 2011 年 11 月,所以我需要 2012 年更靠左一点。另外我只看到数字,如何显示实际的刻度线
    • 非常感谢。只是为了美观,您知道如何在整个图表中添加一些缓冲,以使第一个和最后一个条不会向两侧逐渐变细,以及如何在这些较大的刻度之间添加较小的刻度(比如 tck=1),也许每年一次。所以我确实想要不同尺寸的,我也可以删除顶部 x 轴上的那些。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2014-08-16
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多