如何在Stata的条形图中制作额外的标签
How to make additional labels in barchart in Stata
我是 Stata 的新手,如果有人能帮助我弄清楚如何在我的条形图中添加额外的标签,我将不胜感激。
我有 5 个类别的频率(比方说苹果、橙子、香蕉、葡萄、柠檬),我想制作一个条形图来比较这些类别的百分比(Y 上的刻度是百分比)也想添加频率栏外的数据作为标签。
但是,我想在图表中包含更多与每个类别相关的数据:
我在 Excel 中计算了两个索引(CS 和 DS),值分别在 0 和 1 之间以及 -1 和 0 之间,
所以对于每个类别,我有两个 CS 和 DS 索引,我需要在每个类别的每个栏内显示它们。
所以:
var1 (categories): Apple, Orange, Banana, Grape, Lemon
var2 (frequencies): 65, 20, 1, 0, 39
var3 (CS index): 0.25, 0.12, 0, 0.42, 0.09
var4 (DS index): -0.15, -0.46, 0, -0.12, -0.2
看来我需要运行一个twoway
命令但是失败了。
我已经使用下面的代码大致得出了我想要比较的类别,但我不知道如何向其中添加其他数据:
graph hbar (sum) var2, over(var1) blabel(bar, format(%9.3g)) asyvars
percentages showyvars bar(1, color(gs6)) bar(2, color(gs6)) bar(3,
color(gs6)) bar(4, color(gs6)) bar(5, color(gs6)) bar(6, color(gs6))
legend (off) bargap(100) ytitle("Percentage", size(3.5))
graphregion(fcolor(white)) plotregion(margin(zero))
关键点:通过切换到 twoway bar
并使用字符串变量作为标记标签显示额外文本,这个问题变得最简单。
我们无法评论您的 twoway
代码有什么问题,因为您没有展示它。
详细地说,您的示例和设计提出了不可能的要求。一个栏的长度必须为零,另一个栏非常小,因此您不能在其中放置额外的文本。但是这个代码段展示了一些技巧:
clear
set scheme s1color
input str6 fruit frequency CS DS
Apple 65 0.25 -0.15
Orange 20 0.12 -0.46
Banana 1 0 0
Grape 0 0.42 -0.12
Lemon 39 0.09 -0.2
end
encode fruit, gen(Fruit)
su frequency
gen percent = 100 * frequency/r(sum)
twoway bar percent Fruit, horizontal barw(0.8) yla(1/5, valuelabel ang(h) noticks) bfcolor(none)
gen x = 3
gen text1 = "CS:" + string(CS, "%4.2f")
gen text2 = "DS:" + string(DS, "%4.2f")
gen y1 = Fruit + 0.2
gen y2 = Fruit - 0.2
twoway bar percent Fruit, horizontal barw(0.8) yla(1/5, valuelabel ang(h) noticks) bfcolor(none) ///
|| scatter y1 x , ms(none) mlabpos(3) mlab(text1) ///
|| scatter y2 x , ms(none) mlabpos(3) mlab(text2) legend(off) xtitle(percent) ///
|| scatter Fruit percent, ms(none) mlabpos(3) mlab(percent) xsc(r(0, 56))
这是结果图:
我是 Stata 的新手,如果有人能帮助我弄清楚如何在我的条形图中添加额外的标签,我将不胜感激。
我有 5 个类别的频率(比方说苹果、橙子、香蕉、葡萄、柠檬),我想制作一个条形图来比较这些类别的百分比(Y 上的刻度是百分比)也想添加频率栏外的数据作为标签。
但是,我想在图表中包含更多与每个类别相关的数据:
我在 Excel 中计算了两个索引(CS 和 DS),值分别在 0 和 1 之间以及 -1 和 0 之间, 所以对于每个类别,我有两个 CS 和 DS 索引,我需要在每个类别的每个栏内显示它们。
所以:
var1 (categories): Apple, Orange, Banana, Grape, Lemon
var2 (frequencies): 65, 20, 1, 0, 39
var3 (CS index): 0.25, 0.12, 0, 0.42, 0.09
var4 (DS index): -0.15, -0.46, 0, -0.12, -0.2
看来我需要运行一个twoway
命令但是失败了。
我已经使用下面的代码大致得出了我想要比较的类别,但我不知道如何向其中添加其他数据:
graph hbar (sum) var2, over(var1) blabel(bar, format(%9.3g)) asyvars
percentages showyvars bar(1, color(gs6)) bar(2, color(gs6)) bar(3,
color(gs6)) bar(4, color(gs6)) bar(5, color(gs6)) bar(6, color(gs6))
legend (off) bargap(100) ytitle("Percentage", size(3.5))
graphregion(fcolor(white)) plotregion(margin(zero))
关键点:通过切换到 twoway bar
并使用字符串变量作为标记标签显示额外文本,这个问题变得最简单。
我们无法评论您的 twoway
代码有什么问题,因为您没有展示它。
详细地说,您的示例和设计提出了不可能的要求。一个栏的长度必须为零,另一个栏非常小,因此您不能在其中放置额外的文本。但是这个代码段展示了一些技巧:
clear
set scheme s1color
input str6 fruit frequency CS DS
Apple 65 0.25 -0.15
Orange 20 0.12 -0.46
Banana 1 0 0
Grape 0 0.42 -0.12
Lemon 39 0.09 -0.2
end
encode fruit, gen(Fruit)
su frequency
gen percent = 100 * frequency/r(sum)
twoway bar percent Fruit, horizontal barw(0.8) yla(1/5, valuelabel ang(h) noticks) bfcolor(none)
gen x = 3
gen text1 = "CS:" + string(CS, "%4.2f")
gen text2 = "DS:" + string(DS, "%4.2f")
gen y1 = Fruit + 0.2
gen y2 = Fruit - 0.2
twoway bar percent Fruit, horizontal barw(0.8) yla(1/5, valuelabel ang(h) noticks) bfcolor(none) ///
|| scatter y1 x , ms(none) mlabpos(3) mlab(text1) ///
|| scatter y2 x , ms(none) mlabpos(3) mlab(text2) legend(off) xtitle(percent) ///
|| scatter Fruit percent, ms(none) mlabpos(3) mlab(percent) xsc(r(0, 56))
这是结果图: