调整 Y 轴值条形图
Adjusting Y axis values bar graph
我有以下生成下图的 Stata 代码。但是,我试图 adjust/sort Y 轴上的值(指不同收入组的工人)遵循与数据集相同的顺序。而不是目前每月收入 <= 1500 美元的人被安排为第五而不是第一收入组的顺序。
number_of_workers income_bracket
24806 <= 1.5
31346 1.5-2.9
648409 3
389266 3.01-4.9
351963 5-9.9
271360 >= 10
收入括号变量是字符串,我试过如下转换:
gen income_bracket_numeric = real(income_bracket)
但是,Stata 将转换后的值视为缺失 (.),但 3 除外,它是数字。有没有办法在不改变原始数据的情况下通过将其设为数字来处理收入范围?
preserve
keep if nationality=="nationals"
keep if period=="Q1_2020" | period=="Q4_2020"
graph hbar (mean) number_of_workers, over(income_bracket) over(quarter)
restore
我采纳了 Nick 的建议,我的代码如下所示:
input number_of_workers_q1 str8 income_bracket_q1
24806 "<= 1.5"
31346 "1.5-2.9"
648409 "3"
389266 "3.01-4.9"
351963 "5-9.9"
271360 ">= 10"
end
input number_of_workers_q4 str8 income_bracket_q4
25073 "<= 1.5"
29628 "1.5-2.9"
596767 "3"
442429 "3.01-4.9"
381794 "5-9.9"
273880 ">= 10"
end
gen order = _n
labmask order, values(income_bracket_q1)
graph hbar (asis) number_of_workers_q1 number_of_workers_q4, over(order)
label define order 1 "{&le} 1.5" 6 "{&ge} 10", modify
graph hbar (asis) number_of_workers_q1 number_of_workers_q4, over(order)
除了如下所示的 Y 轴外,该图运行良好:
请注意,您的问题是关于调整分类轴。对于 graph bar
、graph hbar
和 graph dot
,幅度轴始终被视为 y 轴,无论它是垂直的还是水平的。这样做是为了让您可以在水平和垂直之间更改方向,而不必更改所有 y
选项和所有 x
选项。
这是使用 Stata Journal 中的 labmask
的一种方法。
clear
input number_of_workers str8 income_bracket
24806 "<= 1.5"
31346 "1.5-2.9"
648409 "3"
389266 "3.01-4.9"
351963 "5-9.9"
271360 ">= 10"
end
gen order = _n
labmask order, values(income_bracket)
graph hbar (asis) number_of_workers, over(order)
label define order 1 "{&le} 1.5" 6 "{&ge} 10", modify
graph hbar (asis) number_of_workers, over(order)
如果您以正确的顺序定义值标签,然后使用 encode
。
,则不用 labmask
也可以做到这一点
如上所述,您可以改进粗糙的双符号 <=
和 >=
。
我有以下生成下图的 Stata 代码。但是,我试图 adjust/sort Y 轴上的值(指不同收入组的工人)遵循与数据集相同的顺序。而不是目前每月收入 <= 1500 美元的人被安排为第五而不是第一收入组的顺序。
number_of_workers income_bracket
24806 <= 1.5
31346 1.5-2.9
648409 3
389266 3.01-4.9
351963 5-9.9
271360 >= 10
收入括号变量是字符串,我试过如下转换:
gen income_bracket_numeric = real(income_bracket)
但是,Stata 将转换后的值视为缺失 (.),但 3 除外,它是数字。有没有办法在不改变原始数据的情况下通过将其设为数字来处理收入范围?
preserve
keep if nationality=="nationals"
keep if period=="Q1_2020" | period=="Q4_2020"
graph hbar (mean) number_of_workers, over(income_bracket) over(quarter)
restore
我采纳了 Nick 的建议,我的代码如下所示:
input number_of_workers_q1 str8 income_bracket_q1
24806 "<= 1.5"
31346 "1.5-2.9"
648409 "3"
389266 "3.01-4.9"
351963 "5-9.9"
271360 ">= 10"
end
input number_of_workers_q4 str8 income_bracket_q4
25073 "<= 1.5"
29628 "1.5-2.9"
596767 "3"
442429 "3.01-4.9"
381794 "5-9.9"
273880 ">= 10"
end
gen order = _n
labmask order, values(income_bracket_q1)
graph hbar (asis) number_of_workers_q1 number_of_workers_q4, over(order)
label define order 1 "{&le} 1.5" 6 "{&ge} 10", modify
graph hbar (asis) number_of_workers_q1 number_of_workers_q4, over(order)
除了如下所示的 Y 轴外,该图运行良好:
请注意,您的问题是关于调整分类轴。对于 graph bar
、graph hbar
和 graph dot
,幅度轴始终被视为 y 轴,无论它是垂直的还是水平的。这样做是为了让您可以在水平和垂直之间更改方向,而不必更改所有 y
选项和所有 x
选项。
这是使用 Stata Journal 中的 labmask
的一种方法。
clear
input number_of_workers str8 income_bracket
24806 "<= 1.5"
31346 "1.5-2.9"
648409 "3"
389266 "3.01-4.9"
351963 "5-9.9"
271360 ">= 10"
end
gen order = _n
labmask order, values(income_bracket)
graph hbar (asis) number_of_workers, over(order)
label define order 1 "{&le} 1.5" 6 "{&ge} 10", modify
graph hbar (asis) number_of_workers, over(order)
如果您以正确的顺序定义值标签,然后使用 encode
。
labmask
也可以做到这一点
如上所述,您可以改进粗糙的双符号 <=
和 >=
。