您需要做的就是提供具有相同结构的假数据集,或者使用 Stata 提供的数据集之一进行说明。但是很容易伪造具有相似复杂性的数据集。我在这里看到两个分类变量,一个有 9 个类别,没有明显的顺序,另一个有 3 个类别,有明确的时间顺序。正在绘制的是响应的百分比,大概是针对某些问题,例如什么是最重要的问题。
我的答案不是您直接要求的,因为即使是严肃的研究人员,这种设计(尽管非常受欢迎)在我看来在空间使用和可读性方面也非常糟糕和低效。使用传说——有人说是钥匙——充其量是一种必要的邪恶。在这里,很少有人想要或能够记住这个传说。明显的后果是双重的。首先,很多人会在原则上理解您的图表(它只是一个条形图),但不会深入了解它。其次,其他人会尝试参与其中,但不得不在图例和图表之间反复来回走动。任意着色无济于事。传奇人物的不同位置不会有太大帮助。
这是一个独立代码中的假数据集和我的替代建议,使用tabplot(Stata Journal)。 search tabplot 在最新的 Stata 中将指向
SJ-16-2 gr0066 。 . . . . .口语Stata:多个条形图
表格形式
(如果安装了帮助 tabplot)。 . . . . . . . . . . . . . . .新泽西州考克斯
Q2/16 SJ 16(2):491--510
provides multiple bar charts in table form representing
contingency tables for one, two, or three categorical variables
在 2019 年第二季度之前需要订阅或付费才能访问,但您可以从将显示的链接免费下载该程序。帐户here 可免费访问。
clear
set obs 27
set seed 2803
egen issue = seq(), to(9)
egen crisis = seq(), to(3) block(9)
label def crisis 1 "first crisis" 2 "second crisis" 3 "third crisis"
label val crisis crisis
label def issue 1 Stark 2 Targaryen 3 Lannister 4 Baratheon 5 Arryn ///
6 Greyjoy 7 Martell 8 Tully 9 Tyrell
label val issue issue
gen percent = runiform()^2
egen total = total(percent), by(crisis)
replace percent = 100 * percent/total
tabplot issue crisis [iw=percent], horizontal ///
showval(format(%2.1f) mlabsize(vsmall) offset(0.25)) ///
ytitle("") xtitle("")
注意事项:
您的真实数据具有比这更多的结构。自然有对 y 轴上的类别进行重新排序的空间。
如果您愿意,您可以使用不同的颜色条。
我使用了scheme s1color,但您显然可以使用自己喜欢的。
您的九个类别的文本比我的长,更有理由将它们放在可读性强的位置,这意味着水平放置在垂直轴上。它们只是在水平轴上不可读,这可能就是您使用图例的原因。幸运的是,没有冲突,因为在任何情况下,自然或传统的时间顺序都是从左到右的。在其他问题中,哪个变量在哪个轴上可能更难确定。
我还建议在
上玩变体
graph dot (asis) percent , over(crisis) over(issue) ///
asyvars marker(1, ms(Oh)) marker(2, ms(X)) marker(3, ms(+)) legend(row(1))
我没有在这里展示。在该图中有一个图例,但它更易于使用。
简而言之,我对移动尴尬图例问题的解决方案是删除它。