散点图颜色按变量

时间:2018-06-20 18:56:15

标签: stata scatter-plot

我想在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来自聚类分析。通用的解决方案很好,但绘制群集的特定解决方案也可以。

2 个答案:

答案 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