如何在Stata散点图中按变量缩放点的面积?
Stata中按变量缩放散点面积的解决方法
在Stata里直接使用msize(变量名)会触发报错,因为Stata默认将括号内的内容识别为预定义的样式名称(比如small、large),而非数值变量。要实现按变量缩放点的面积,需先将目标变量映射到Stata支持的符号尺寸范围,再指定给msize选项,具体操作如下:
1. 计算变量平方根(匹配面积缩放逻辑)
点的面积与尺寸的平方成正比,对目标变量取平方根,可让点的面积与原变量呈线性相关:
sysuse auto2, clear gen weight_sqrt = sqrt(weight)
2. 将平方根变量标准化到Stata尺寸范围
Stata的符号尺寸对应数值区间为0(tiny)到5(giant),直接使用sqrt(weight)的数值会远超该范围,需将其标准化到合适区间(例如1到4,对应small到huge):
summarize weight_sqrt gen size_var = (weight_sqrt - r(min)) / (r(max) - r(min)) * 3 + 1
代码中的3和1为调整系数,可根据视觉需求修改,让点的大小更贴合预期。
3. 绘制散点图并指定尺寸变量
通过msize(size_var)调用标准化后的变量,实现按变量缩放点的面积:
scatter price mpg, msize(size_var) legend(off)
简化写法(直接缩放变量)
若不想标准化,也可直接将平方根变量除以一个系数,使其数值落在0-5区间内,示例如下:
gen size_var = sqrt(weight)/15 // 15为适配auto2数据weight范围的估算系数 scatter price mpg, msize(size_var)
上述方法可实现与R语言ggplot2中类似的效果,点的面积会随weight的平方根变化。
内容的提问来源于stack exchange,提问作者bill999




