Stata | 解决 graph 中 x 轴刻度重叠问题

时间:2022-07-22
本文章向大家介绍Stata | 解决 graph 中 x 轴刻度重叠问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

提出问题

刚有朋友问我怎么调整 boxplot 中 x 轴标签,用上图重现了他的问题。换句话说,问题是如何解决 graph 中 x 轴重叠的问题。

分析思路

  1. 把图调整成水平(horizontal);
  2. 将 x 轴刻度倾斜,避免重叠;
  3. 更改 x 轴的刻度显示区间,这可以通过定义 x 轴值的 label 实现。

解决过程

方法一:调整为水平图

graph hbox y, over(year)

方法二:将 x 轴标签倾斜

graph box y, over(year, label(angle(45)))

方法三:调整刻度间距

forval y = 1990/2010 {
    if mod(`y', 5) {
        label def ylbl `y' `"{char 0xa0}"', add // 0xa0:NO-BREAK SPACE
    }
}
label val year ylbl
label li ylbl
graph box y, over(year)

简单解释代码中的 {char 0xa0},这是 SMCL(Stata Markup and Control Language) 语言,是 Stata 中的一种标记语言, help 文档大都是用它编写的。char 表示字符,0xa0 是 ASCII 编码的空格。所以这里实际是“偷梁换柱”,将 x 轴刻度每隔 5 个单位换为空格,这样绘制出来的图就实现了肉眼不可见的空白。

我刚开始也顺着这个思路考虑是否能通过 SMCL 语句更改 x 轴刻度的倾斜角度,但 SMCL 似乎没有并不能实现文本倾斜。对绘图中可用的 SMCL 语句,可自行 help text 查看。

附录:演示数据生成代码

clear
set obs 126
egen year = seq(), block(6) from(1990) to(2010)
set seed 2803
gen y = exp(rnormal())

参考资料

https://www.statalist.org/forums/forum/general-stata-discussion/general/1297758-axis-options-for-box-plot-how-can-i-reduce-number-of-labels-on-the-x-axis