按变量散点图颜色



我想在 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

最新更新