我尝试使用ciplot
函数在Stata中合并多个graph combine
图表:
sysuse auto
ciplot foreign, by(rep78) hor ///
graphregion(color(white)) ///
rcap(lcolor(black) msiz(zero)) ///
mc(black) ms(O) ///
note("") xtitle( ) ///
fysize(62.5) saving(g1, replace ) nodraw
ciplot foreign, by(headroom) hor ///
graphregion(color(white)) ///
rcap(lcolor(black) msiz(zero)) ///
mc(black) ms(O) ///
note("") xtitle( ) ///
fysize(100) saving(g2, replace ) nodraw
gr combine g1.gph ///
g2.gph ///
, col(1) xcom graphregion(color(white)) ///
title("Proportion of patients across studied variables")
一切按预期工作,我得到一个这样的图表:
问题在于,由于各个刻度的标签宽度不同,图形的X轴开始位置略有不同。当这些标签之间存在较大差异时,问题会更加严重。
有没有办法强制X轴从图形区域的同一点开始?
答案 0 :(得分:3)
改善图表的一种方法是使用titlegap()
选项。但它可能不太令人满意,因为涉及手动调整,结果不会是完美的。此外,如果正在制作许多图表,将更改合并到代码中可能会变得很麻烦。
例如:
sysuse auto, clear
ciplot foreign, by(rep78) hor ///
graphregion(color(white)) ///
rcap(lcolor(black) msiz(zero)) ///
mc(black) ms(O) ///
note("") xtitle( ) ///
yscale(titlegap(3.5)) ///
fysize(62.5) saving(g1, replace ) nodraw
ciplot foreign, by(headroom) hor ///
graphregion(color(white)) ///
rcap(lcolor(black) msiz(zero)) ///
mc(black) ms(O) ///
note("") xtitle( ) ///
fysize(100) saving(g2, replace ) nodraw
gr combine g1.gph g2.gph, ///
col(1) xcom graphregion(color(white)) ///
title("Proportion of patients across studied variables")
outergap()
选项提供了类似的解决方案。这些选项记录在help axis_scale_options
。
答案 1 :(得分:2)
在这种情况下,刻度的标签宽度显然取决于小数位数。
这里有两个主要问题:
ciplot
不允许在y-axis
标签中指定变量级别的格式。graph combine
在合并它们之前再次绘制了两个图形。以下是一个相当通用的修复程序,用于标准化组合图中的小数:
graph combine g1 g2, cols(1) ///
xcommon ///
graphregion(color(white)) ///
title("Proportion of patients across studied variables") ///
nodraw ///
name(g3, replace)
local decimals 1
local i 0
foreach var in rep78 headroom {
local ++i
local j 0
quietly levelsof `var', local(`var'm)
foreach l of local `var'm {
local ++j
local il : display %2.`decimals'f `l'
.g3.plotregion1.graph`i'.yaxis1.major.ticks[`j'][2] = "`il'"
}
}
graph display g3
请注意,您无法使用ylabel()
中的ciplot
选项来指定刻度标签,因为您不知道先验的实际刻度值。