我想在 Stata 中制作一个散点图,其中点根据分类变量着色。
我发现做到这一点的唯一方法是在双向图的图层中编码颜色。
但是,对于如此简单的操作,这似乎是一个相当复杂的解决方案:
twoway (scatter latitud longitud if nougrups4 ==1, mcolor(black)) ///
(scatter latitud longitud if nougrups4 ==2, mcolor(blue)) ///
(scatter latitud longitud if nougrups4 ==3, mcolor(red)) ///
(scatter latitud longitud if nougrups4 ==4, mcolor(green))
有没有更简单和自动的方法可以做到这一点?
在本例中,分类变量nougrups4
来自聚类分析。一般解决方案很好,但绘制集群的特定解决方案也可以。
这是我手动执行此操作的方式:
sysuse auto, clear
separate price, by(rep78)
tw scatter price? mpg
drop price?
或者在一行中使用 Nick Cox 来自 SSC 的sepscatter
命令:
sepscatter price mpg, separate(rep78)
后一个命令还可以使用recast()
选项输出其他类型的绘图。
对于您想要做的事情,没有一个"更简单"的内置解决方案。
但是,下面是一个简单的包装器命令,您可以扩展它以满足您的需求:
capture program drop foo
program define foo
syntax varlist(min=1 max=3)
quietly {
tokenize `varlist'
levelsof `3', local(foolevels)
local i = 0
local foocolors red green blue
foreach x of local foolevels {
local ++i
local extra `extra' || scatter `1' `2' if `3' == `x', mcolor("`: word `i' of `foocolors''")
}
twoway `extra'
}
end
还有一个玩具示例:
clear
set obs 10
generate A = runiform()
generate B = runiform()
generate C = .
replace C = 1 in 1/3
replace C = 2 in 4/7
replace C = 3 in 8/10
foo A B C