如何在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)) 

这是结果图: