按变量散点图颜色

Scatter plot color by variable

我想在 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 来自聚类分析。一个通用的方案就好了,还要有一个具体的方案来画簇。

没有 'simpler' 内置解决方案来满足您的需求。

但是,这是一个简单的包装命令,您可以对其进行扩展以满足您的需要:

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

这是我手工完成的方式:

sysuse auto, clear

separate price, by(rep78)
tw scatter price? mpg
drop price? 

或者在一行中使用来自 SSC 的 Nick Cox 的 sepscatter 命令:

sepscatter price mpg, separate(rep78)

后一个命令还可以使用recast()选项输出其他类型的图。