我有两个变量:
ie_ctotal
cntry2
注意:cntry2
是字符串变量encode
的{{1}}版本:我不知道这是否会影响事情。
我想要cntry
twoway scatter
和ie_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
只为这一个图表提供数据。
答案 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)
您希望将国家/地区排序为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("")
简而言之:此处的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
。