Stata中能否为by(province)分面图的各省份设置不同颜色?
在Stata中实现按省份分面并为每个分面设置不同颜色的方法
要实现按province分面且每个分面使用不同颜色展示各行业从业人数,Stata的原生by()分面选项无法直接为每个子图单独设置颜色,需要通过单独生成每个省份的子图再合并的方式实现,以下是具体步骤:
核心思路
- 为每个省份单独绘制条形图(用条形图展示分类变量的从业人数比直方图更合适),并为每个子图指定独特颜色;
- 将所有子图合并为一个分面图。
具体代码实现
假设你的数据中每行代表一个个体,从业人数通过统计各行业的样本量得到(若有专门的从业人数变量,可替换代码中的(count)为(sum) 从业人数变量名):
方法1:使用levelsof循环生成子图
// 定义20个不同颜色的列表(可根据喜好调整) local colors "blue red green orange purple yellow cyan magenta brown lime pink teal navy maroon olive gray gold indigo coral khaki" local graph_idx = 1 // 获取所有省份的唯一值 levelsof province, local(province_list) // 循环为每个省份生成单独图形 foreach prov of local province_list { // 取出对应序号的颜色 local curr_color = word("`colors'", `graph_idx') // 绘制当前省份的行业从业人数条形图 graph bar (count) if province == "`prov'", /// over(industry) /// 按行业分组 color(`curr_color') /// 设置当前分面的颜色 title("`prov'") /// 子图标题为省份名 name(subgraph`graph_idx', replace) /// 子图命名 local graph_idx = `graph_idx' + 1 } // 合并所有子图,调整布局(20个省份用4行5列) graph combine subgraph1-subgraph`=`graph_idx'-1', /// rows(4) cols(5) /// 布局设置 title("各省份分行业从业人数") /// 总标题 note("每个分面使用独特颜色区分省份")
方法2:使用statsby批量生成子图
// 定义颜色列表 local colors "blue red green orange purple yellow cyan magenta brown lime pink teal navy maroon olive gray gold indigo coral khaki" // 按省份分组生成子图,自动为每个子图分配对应颜色 statsby, by(province): graph bar (count), /// over(industry) /// color(`:word `_n' of `colors'') /// 利用`_n`取对应序号的颜色 title("`province'") /// name(prov`_n', replace) // 合并子图 graph combine prov1-prov20, /// rows(4) cols(5) /// title("各省份分行业从业人数")
注意事项
- 若你的
province是数值型变量,无需在if province == "prov'"中加引号,直接写if province == `prov''即可; - 颜色列表可通过Stata命令
color list查看所有支持的颜色名称,也可使用RGB值(如c(255 0 0)代表红色); - 合并子图时的
rows()和cols()参数可根据省份数量灵活调整,保证布局美观。
内容的提问来源于stack exchange,提问作者flxflks
相关产品推荐
相关产品推荐

