【问题标题】:Create Side-by-Side Bar Plot创建并排条形图
【发布时间】:2015-09-24 16:47:01
【问题描述】:

我想根据频率创建并排条形图。在Side-by-side bars in bar plot 找到了一个 R 示例,这可能在 Stata 中实现吗?

假设我有这个数据:

clear
set obs 1000
set seed 1
gen var1 = runiform()*10
set seed 2
gen var2 = runiform()*10
set seed 3
gen var3 = runiform()*10

gen var1_value = "A" if var1<3
replace var1_value = "B" if var1>=3 & var1<=9
replace var1_value = "C" if var1>9

gen var2_value = "A" if var2<4
replace var2_value = "B" if var2>=4 & var2<=6
replace var2_value = "C" if var2>6 

gen var3_value = "A" if var3<1
replace var3_value = "B" if var3>=1 & var3<=3
replace var3_value = "C" if var3>3

我可以使用用户编写的命令tabplotcatplot 分别绘制这些:

capture ssc install tabplot 
tabplot var1_value 
tabplot var2_value
tabplot var3_value

capture ssc install catplot
catplot var1_value
catplot var2_value
catplot var3_value

但是,我希望这三个在同一个地块上,按价值并排。如果可能的话,我希望每个值都有很多并排的图,而不是本例中的 3 个。

【问题讨论】:

  • “用户安装的功能”已编辑为“用户编写的命令”。

标签: plot stata


【解决方案1】:

有几种方法可以做到这一点。最简单的可能是对数据进行简单的重组。按照你的例子,我假设之前有ssc inst catplot。添加诸如asyvars 之类的选项,以获得不同颜色的razzmatazz。

clear
set obs 1000
set seed 1
gen var1 = runiform()*10
set seed 2
gen var2 = runiform()*10
set seed 3
gen var3 = runiform()*10

gen var1_value = "A" if var1<3
replace var1_value = "B" if var1>=3 & var1<=9
replace var1_value = "C" if var1>9

gen var2_value = "A" if var2<4
replace var2_value = "B" if var2>=4 & var2<=6
replace var2_value = "C" if var2>6 

gen var3_value = "A" if var3<1
replace var3_value = "B" if var3>=1 & var3<=3
replace var3_value = "C" if var3>3

forval j = 1/3 { 
    clonevar value`j' = var`j'_value 
}

gen id = _n 
reshape long value, i(id) j(which) 
catplot which value, asyvars 
catplot value which, asyvars  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2017-06-28
    • 2015-05-08
    • 1970-01-01
    相关资源
    最近更新 更多