按双向散射中的变量排序。 X轴保持字母和排序产生胡言乱语:为什么?

时间:2015-04-01 16:47:38

标签: stata

我有两个变量:

ie_ctotal
cntry2

注意:cntry2是字符串变量encode的{​​{1}}版本:我不知道这是否会影响事情。

我想要cntry twoway scatterie_ctotal,我希望通过另一个变量cntry2排序这个分散,

gdppc

上面没有 twoway || scatter ie_ctotal cntry2, c(1) xlabel(,valuelabel) 的工作正常。然而,一旦我介绍sort

sort

图表变成乱码,或者说它根据 twoway || scatter ie_ctotal cntry2, c(1) sort(gdppc) xlabel(,valuelabel) 连接,但x轴保持字母顺序,使得连接看起来很乱。

关于我做错了什么的想法?

注意:我不想sort原始数据,因为在之前的问题中我被告知这是一个坏主意。所以我想sort只为这一个图表提供数据。

2 个答案:

答案 0 :(得分:2)

这里没有可复制的例子,甚至没有图表,但可以猜出问题。

您正在上面输入

c(1) 
虽然Stata做对了,但这是不明智的。键入

会更好
c(l)

指示Stata在一行中连接图表上的数据点。 (在这个细节上向@Dimitriy V.Masterov点头。)

在第一个示例中,cntry2的值定义 x 轴。

正如您所说,sort(gdppc)的效果是按照值从最低gdppc到最高的顺序连接点。结果显然不是你想要的。

这是一个重要的可重复的例子。

. sysuse auto, clear
(1978 Automobile Data)

. scatter mpg weight, sort(price) c(l)

enter image description here

您希望将国家/地区排序为gdppc。这就像根据make在Stata的自动数据中排序mpg,然后绘制weight。在这里,我只为外国汽车这样做。它不是一个非常好的图表,但它在精神上听起来与你想要的一致。此解决方案需要安装labmask search labmask,然后从 Stata Journal 网站下载。

sysuse auto, clear
keep if foreign
sort mpg 
gen obsno = _n 
labmask obsno, values(make) 
scatter weight obsno, xla(1/22, valuelabel ang(v) noticks) xtitle("") 

enter image description here

简而言之:此处的sort()选项定义了连接顺序;它没有将 x 轴变量映射到重新洗牌的版本。你需要在图形之前做。

更新实际上,您可以在没有任何先前操作的情况下获得基本相同的图形:

graph dot (asis) weight if foreign, over(make, sort(mpg) label(ang(v)))  vertical linetype(line) lines(lc(none))

这符合OP对在 x 轴上放置标记类别的兴趣。更容易阅读的图表会将它们放在 y 轴上:然后可以从左到右读取文本。为此,省略上面的vertical:这是graph dot的默认值。虽然上面的命令通过将颜色设置为none来省略引导线,但非常薄的浅色引导线可以提供帮助。

答案 1 :(得分:0)

这使用了使用另一个变量的顺序进行编码的技巧来获得正确的排序:

sysuse auto, clear
keep if foreign==1

sencode make, gen(encoded_make) gsort(-weight)
levelsof encoded_make, local(labels)
tw scatter price encoded_make, mlabel(weight) c(1) xlabel(`labels', value angle(45)) sort(weight)

您需要从SSC安装sencode