我想在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
来自聚类分析。通用的解决方案很好,但绘制群集的特定解决方案也可以。
答案 0 :(得分:2)
这就是我要手动执行的操作:
sysuse auto, clear
separate price, by(rep78)
tw scatter price? mpg
drop price?
或者使用SSC的Nick Cox的sepscatter
命令一行:
sepscatter price mpg, separate(rep78)
后一个命令还可以使用recast()
选项输出其他类型的图。
答案 1 :(得分:1)
对于您要执行的操作,没有“更简单”的内置解决方案。
但是,这是一个简单的包装器命令,您可以对其进行扩展以满足您的需求:
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