在Stata中,如何控制组合图的大小?

时间:2014-08-06 11:15:26

标签: graph stata

我尝试使用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")

一切按预期工作,我得到一个这样的图表:

enter image description here

问题在于,由于各个刻度的标签宽度不同,图形的X轴开始位置略有不同。当这些标签之间存在较大差异时,问题会更加严重。

有没有办法强制X轴从图形区域的同一点开始?

2 个答案:

答案 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

enter image description here

请注意,您无法使用ylabel()中的ciplot选项来指定刻度标签,因为您不知道先验的实际刻度值。