【问题标题】:Scatter plot color by variable按变量散点图颜色
【发布时间】:2018-06-20 18:56:15
【问题描述】:

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

【问题讨论】:

  • 您可以为twoway scatter 命令创建一个包装程序来自动执行此操作。
  • 我想我可以。但是我想确认没有一个简单的内置解决方案可以做到这一点,我错过了。其他统计软件包(比 Stata 更简单、更便宜)具有该功能。例如,我记得在 Statgraphics、R(基础图形和 ggplot2)甚至 RCommander 中使用过它。即使在 Excel 中,您也可以绘制以类别为颜色的散点图。
  • 我不确定上述语法有什么复杂之处。无论如何,我在下面的回答中提供了一个简单的例子。
  • 一般来说,不同的颜色[u]rs 可能效果不佳,最好首先考虑不同的点或标记符号。您自己的暂定代码同时使用红色和绿色,但众所周知,或者应该众所周知,许多人很难区分它们。

标签: stata scatter-plot


【解决方案1】:

这就是我手动操作的方式:

sysuse auto, clear

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

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

sepscatter price mpg, separate(rep78)

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

【讨论】:

  • sepscatter 来自 SSC 并且免费(尽管欢迎向引文和奠基的作者捐款)。
【解决方案2】:

对于您想要做的事情,没有“更简单”的内置解决方案。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    相关资源
    最近更新 更多