按变量散点图颜色
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()
选项输出其他类型的图。
我想在 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()
选项输出其他类型的图。