Stata 中图表的条形图颜色一致
consistent barplot colors across graphs in Stata
我正在 Stata 中输出堆叠条形图,每个堆叠条从下到上排序:最大 -> 每个团队的最小获胜百分比。
clear
set obs 10
gen team = "yankees" if inlist(_n, 1, 6)
replace team = "red sox" if inlist(_n, 2, 7)
replace team = "mets" if inlist(_n, 3, 8)
replace team = "nationals" if inlist(_n, 4, 9)
replace team = "astros" if inlist(_n, 5, 10)
gen wins = -10 + 20 * _n
replace wins = wins[11 - _n] in 6/10
gen year = cond(_n <= 5, 2013, 2014)
gen season = "regular" in 1/10
set obs 16
replace team = "yankees" if inlist(_n, 11, 14)
replace team = "red sox" if inlist(_n, 12, 15)
replace team = "astros" if inlist(_n, 13)
replace team = "mets" if inlist(_n, 16)
replace wins = -10 + 30 * (_n-10) in 11/16
replace wins = wins[17 - _n] in 14/16
replace year = 2013 in 11/13
replace year = 2014 in 14/16
replace season = "playoffs" in 11/16
foreach x in "regular" "playoffs"{
preserve
keep if season == "`x'"
#delimit ;
graph bar (mean) wins, over(team, sort(1) descending) over(year, label(ticks labs(small))) asyvars stack
ytitle("Wins (%)")
title("Wins Percentages in `x'")
blabel(bar, position(center) format(%9.0f) size(2.5) color(white))
legend(size(2) rowgap(*.45) pos(6) rows (2) region(style(legend) fcolor(gs15) margin(medsmall)) colgap(*.75) symxsize(*.75) keygap(*.33));
#delimit cr
restore
问题在于图表中的球队颜色有所不同,因为并非所有常规赛球队都出现在季后赛中,并且颜色是按字母顺序分配的。例如,红袜队在图 1 中为黄色,但在图 2 中为绿色。
在 Stata 的帮助菜单中,唯一的修改似乎是按 # 栏:
bar(#, barlook_options) look of #th yvar bar
例如:
graph bar yvar1 yvar2, bar(1,color(green)) bar(2,color(red))
我在找
graph bar yvar1 yvar2, bar(team=="Yankees",color(blue)) bar(team=="Red Sox",color(red))
http://www.stata.com/statalist/archive/2011-03/msg00097.html 提供指导,但不是上述结果。
这只是部分答案,如果其他人或我可以进一步补充,将予以补充。
以您的沙箱为例,并以对您的问题不重要的方式重写代码,
clear
set obs 10
gen team = "yankees" if inlist(_n, 1, 6)
replace team = "red sox" if inlist(_n, 2, 7)
replace team = "mets" if inlist(_n, 3, 8)
replace team = "nationals" if inlist(_n, 4, 9)
replace team = "astros" if inlist(_n, 5, 10)
gen wins = -10 + 20 * _n
replace wins = wins[11 - _n] in 6/10
gen year = cond(_n <= 5, 2013, 2014)
#delimit ;
graph bar (mean) wins, over(team, sort(1) descending) over(year, label(ticks labs(small))) asyvars stack
ytitle("Wins (%)")
title("Wins")
blabel(bar, position(center) format(%9.0f) size(2.5) color(white))
legend(size(2) rowgap(*.45) pos(6) rows (2) region(style(legend) fcolor(gs15) margin(medsmall)) colgap(*.75) symxsize(*.75) keygap(*.33));
#delimit cr
我的想法是为每个团队分成一个变量:
separate wins, by(team) veryshortlabel
然后允许这种图形:
graph hbar (asis) wins? , over(team) over(year) nofill legend(off)
这可能是您解决更复杂问题的更好基础。 (我不确定我们是否应该理解棒球奥秘。事实上,这就是棒球吗?这些细节并不是普遍理解的。)
我自己的观点是,堆叠条形图会使图形更糟,但这是另一个问题。
我正在 Stata 中输出堆叠条形图,每个堆叠条从下到上排序:最大 -> 每个团队的最小获胜百分比。
clear
set obs 10
gen team = "yankees" if inlist(_n, 1, 6)
replace team = "red sox" if inlist(_n, 2, 7)
replace team = "mets" if inlist(_n, 3, 8)
replace team = "nationals" if inlist(_n, 4, 9)
replace team = "astros" if inlist(_n, 5, 10)
gen wins = -10 + 20 * _n
replace wins = wins[11 - _n] in 6/10
gen year = cond(_n <= 5, 2013, 2014)
gen season = "regular" in 1/10
set obs 16
replace team = "yankees" if inlist(_n, 11, 14)
replace team = "red sox" if inlist(_n, 12, 15)
replace team = "astros" if inlist(_n, 13)
replace team = "mets" if inlist(_n, 16)
replace wins = -10 + 30 * (_n-10) in 11/16
replace wins = wins[17 - _n] in 14/16
replace year = 2013 in 11/13
replace year = 2014 in 14/16
replace season = "playoffs" in 11/16
foreach x in "regular" "playoffs"{
preserve
keep if season == "`x'"
#delimit ;
graph bar (mean) wins, over(team, sort(1) descending) over(year, label(ticks labs(small))) asyvars stack
ytitle("Wins (%)")
title("Wins Percentages in `x'")
blabel(bar, position(center) format(%9.0f) size(2.5) color(white))
legend(size(2) rowgap(*.45) pos(6) rows (2) region(style(legend) fcolor(gs15) margin(medsmall)) colgap(*.75) symxsize(*.75) keygap(*.33));
#delimit cr
restore
问题在于图表中的球队颜色有所不同,因为并非所有常规赛球队都出现在季后赛中,并且颜色是按字母顺序分配的。例如,红袜队在图 1 中为黄色,但在图 2 中为绿色。
在 Stata 的帮助菜单中,唯一的修改似乎是按 # 栏:
bar(#, barlook_options) look of #th yvar bar
例如:
graph bar yvar1 yvar2, bar(1,color(green)) bar(2,color(red))
我在找
graph bar yvar1 yvar2, bar(team=="Yankees",color(blue)) bar(team=="Red Sox",color(red))
http://www.stata.com/statalist/archive/2011-03/msg00097.html 提供指导,但不是上述结果。
这只是部分答案,如果其他人或我可以进一步补充,将予以补充。
以您的沙箱为例,并以对您的问题不重要的方式重写代码,
clear
set obs 10
gen team = "yankees" if inlist(_n, 1, 6)
replace team = "red sox" if inlist(_n, 2, 7)
replace team = "mets" if inlist(_n, 3, 8)
replace team = "nationals" if inlist(_n, 4, 9)
replace team = "astros" if inlist(_n, 5, 10)
gen wins = -10 + 20 * _n
replace wins = wins[11 - _n] in 6/10
gen year = cond(_n <= 5, 2013, 2014)
#delimit ;
graph bar (mean) wins, over(team, sort(1) descending) over(year, label(ticks labs(small))) asyvars stack
ytitle("Wins (%)")
title("Wins")
blabel(bar, position(center) format(%9.0f) size(2.5) color(white))
legend(size(2) rowgap(*.45) pos(6) rows (2) region(style(legend) fcolor(gs15) margin(medsmall)) colgap(*.75) symxsize(*.75) keygap(*.33));
#delimit cr
我的想法是为每个团队分成一个变量:
separate wins, by(team) veryshortlabel
然后允许这种图形:
graph hbar (asis) wins? , over(team) over(year) nofill legend(off)
这可能是您解决更复杂问题的更好基础。 (我不确定我们是否应该理解棒球奥秘。事实上,这就是棒球吗?这些细节并不是普遍理解的。)
我自己的观点是,堆叠条形图会使图形更糟,但这是另一个问题。