通过另一个变量以双向方式重新排序面板,by()图

Reordering panels by another variable in twoway, by() graphs

假设我制作了以下图表,显示了 9 头猪随时间变化的重量:

webuse pig
tw line weight week if inrange(id,1,9), by(id) subtitle(, nospan)

是否可以在保留原始标签的情况下通过另一个变量对面板重新排序?我可以想象定义另一个以正确方式排序的变量,然后用正确的 id 标记它,但很好奇是否有更简单的方法来实现它。

我认为你是对的:你需要一个新的排序变量。积极的是,您可以根据任何选择标准进行订购。注意用于排序的变量的关系,它总是可以通过引用原始标识符来打破。在这里,我们按最终权重排序,默认情况下,最小的优先。 (对于最大的优先,否定 weight 变量。)

webuse pig, clear 
keep if id <= 9 
bysort id (week) : gen last = weight[_N]
egen newid = group(last id)
bysort newid : gen toshow = strofreal(id) + " (" + strofreal(last, "%2.1f") + ")"
* search labmask           for download links 
labmask newid , values(toshow)
set scheme s1color 
line weight week, by(newid, note("")) sort xla(1/9)

讨论此处原则的短篇论文已经在准备中,将于 2021 年在 Stata 期刊 上发表。