使用grc1leg

时间:2019-03-04 17:48:10

标签: stata

我试图在一个插图中显示四个不同的图形。我正在使用社区贡献的命令grc1leg。 但是,如果我在每个单独的图中使用relabel,则命令grc1leg无法识别更改。

我的数据示例是:

+---------+----------+------------+----+----+----+----+
| student | matutino | vespertino | p6 | p7 | p8 | p9 |
+---------+----------+------------+----+----+----+----+
| 1       | 1        | 0          | 1  | 3  | 4  | 3  |
+---------+----------+------------+----+----+----+----+
| 2       | 1        | 0          | 2  | 5  | 1  | 2  |
+---------+----------+------------+----+----+----+----+
| 3       | 0        | 1          | 2  | 2  | 6  | 2  |
+---------+----------+------------+----+----+----+----+

变量Matutino是学生是否参加早班的假人。

变量Vespertino是学生是否参加下午班的假人。

变量p6涉及问题6,该问题询问学生是否工作,并采用两个值:12

变量p7询问学生工作了多长时间,它需要六个值:1,2,3,4,5,6

变量p8p9就像p7

我的数据以数字形式编码,但是它代表调查的字符串答案。我想在图表的x-axis中使用字符串名称而不是数字代码。

我的代码如下:

graph bar (percent) matutino (percent) vespertino, over (p6,relabel (1 "Si" 2 "No")) name(p6, replace) title("¿Trabajas actualmente?") nolabel
graph bar (percent) matutino (percent) vespertino, over (p7,relabel (1 "0-1" 2 "1-5" 3 "6-11" 4 "12-24" 5 "más de 24")) name(p7, replace) title ("Tiempo trabajando") legend(off) b1title("Meses")
graph bar (percent) matutino (percent) vespertino, over (p8,relabel (1 "1-3" 2 "4-6" 3 "7-9" 4 "10-12" 5 "13-15" 6 "16-18" 7 "19-21" 8 "22-24" 9 "más de 25")) name(p8, replace) title ("Horas trabajadas a la semana") legend(off) b1title("Horas")
graph bar (percent) matutino (percent) vespertino, over (p9,relabel (1 "Independencia" 2 "Gastos personales" 3 "Continuar estudiando" 4 "Experiencia laboral" 5 "Mantener a la familia" 6 "Ayuda en el negocio familiar") label (labsize(small) angle(45))) name(p9, replace) title ("Motivo para trabajar") legend(off)
grc1leg p6 p7 p8 p9, l1(Porcentaje) legendfrom(p6)

该代码分别可完美地适用于每个图形,例如:

graph bar (percent) matutino (percent) vespertino, over (p7,relabel (1 "0-1" 2 "1-5" 3 "6-11" 4 "12-24" 5 "más de 24")) name(p7, replace) title ("Tiempo trabajando") legend(off) b1title("Meses")

例如,当我组合四个图形但没有relabel选项时,代码也可以工作:

graph bar (percent) matutino (percent) vespertino, over (p6) name(p6, replace) title("¿Trabajas actualmente?") nolabel
graph bar (percent) matutino (percent) vespertino, over (p7) name(p7, replace) title ("Tiempo trabajando") legend(off) b1title("Meses")
graph bar (percent) matutino (percent) vespertino, over (p8) name(p8, replace) title ("Horas trabajadas a la semana") legend(off) b1title("Horas")
graph bar (percent) matutino (percent) vespertino, over (p9) name(p9, replace) title ("Motivo para trabajar") legend(off)
grc1leg p6 p7 p8 p9, l1(Porcentaje) legendfrom(p6)

我想要的是在相同的图中使用四个图,但是要使用我在每个单独的图中写下的字符串标签。

我也尝试了标签定义选项,但在显示图形时不起作用。我发现的唯一解决方案是使用字符串名称为每个问题创建新变量。但是,我有154个问题,我认为应该有一个更简单的方法。

交叉发布的on Statalist

1 个答案:

答案 0 :(得分:2)

重新标记不起作用,因为grc1leg在合并每个图形之前会再次绘制它们。

解决此问题的最简单方法是不使用relabel选项合并四个图,然后按如下所示对生成的图进行后处理:

local lbl 1-3 4-6 7-9
tokenize `lbl'

forvalues i = 1 / 3 {
    gr_edit .plotregion1.graph3.grpaxis.edit_tick `i' ///
    `.Graph.plotregion1.graph3.grpaxis.major.dlg_tickpos[`i']' ///
    `"``i''"', tickset(major)
}

此想法是定义一个本地宏lbl,该宏保存标签,然后在刻度位置上循环以重新为其添加标签。上面的代码在这种情况下修改了第三张图,但是其余图的处理过程相同。