如何在Stata 14中绘制含两个分类变量的目标条形图
问题描述
我在Stata 14中生成了不符合预期的条形图,该图基于给定的数据列构建。我先用以下两条命令生成了绘图所需的最后两个变量:
// Command 1 gen mayores_65=0 if Edad>=65 & ID !=. replace mayores_65=1 if Edad<65 label values mayores_65 dSíNo label define dSíNo 0 "No" 1 "Sí" label values mayores_65 dSíNo // Command 2 gen Estatus=0 if Nivel_social==0 replace Estatus=1 if Nivel_social==1 replace Estatus=2 if Nivel_social==2 | Nivel_social==3 | Nivel_social==4 | Nivel_social==5
随后用这条命令生成了错误图形:
graph bar (percent), over(Estatus) over(mayores_65)
请问能否生成我预期的条形图(按年龄组分组,每组内并列展示不同社会阶层占比的样式)?
解决方案
1. 修正变量生成命令的错误
你生成mayores_65时的标签定义顺序有误,Stata要求先定义标签再赋值给变量,否则会提示标签不存在。修正后的命令:
// 修正后的年龄分组变量生成 label define dSíNo 0 "No" 1 "Sí" gen mayores_65=0 if Edad>=65 & ID !=. replace mayores_65=1 if Edad<65 label values mayores_65 dSíNo // 社会阶层分组变量生成(原命令可保留,建议补充标签让图形更清晰) gen Estatus=0 if Nivel_social==0 replace Estatus=1 if Nivel_social==1 replace Estatus=2 if Nivel_social==2 | Nivel_social==3 | Nivel_social==4 | Nivel_social==5 label define Estatus_lab 0 "类别0" 1 "类别1" 2 "类别2-5" label values Estatus Estatus_lab
2. 生成预期的条形图
根据你描述的预期样式,调整graph bar的参数顺序和选项即可实现:
graph bar (percent), over(mayores_65) over(Estatus) asyvars /// legend(pos(6) ring(0) label(1 "类别0") label(2 "类别1") label(3 "类别2-5")) /// bar(1, color(#1f77b4)) bar(2, color(#ff7f0e)) bar(3, color(#2ca02c)) /// ytitle("占比(%)") xtitle("年龄≥65岁?") /// title("不同年龄组的社会阶层分布") /// yscale(range(0 100))
over(mayores_65) over(Estatus):调整分组顺序,让年龄组作为x轴主分组asyvars:将社会阶层类别拆分为并列条形,而非堆叠- 补充颜色、标签、标题等参数,让图形更贴合预期样式
如果需要展示每个年龄组内各社会阶层的占比总和为100%,可以用by()选项生成子图:
graph bar (percent) over(Estatus), by(mayores_65) /// legend(pos(6) ring(0)) /// bar(1, color(#1f77b4)) bar(2, color(#ff7f0e)) bar(3, color(#2ca02c)) /// ytitle("占比(%)") /// title("不同年龄组的社会阶层分布") /// yscale(range(0 100))
内容的提问来源于stack exchange,提问作者user22236177
相关产品推荐
相关产品推荐

