创建并排条形图
Create Side-by-Side Bar Plot
我想根据频率创建并排条形图。 Side-by-side bars in bar plot 在 Stata 中可以找到 R 示例吗?
假设我有这个数据:
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
我可以使用用户编写的命令 tabplot
和 catplot
来单独绘制它们:
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 个图。
有几种方法可以做到这一点。最简单的可能是对数据进行简单的重组。按照你的例子,我假设一个先验 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
我想根据频率创建并排条形图。 Side-by-side bars in bar plot 在 Stata 中可以找到 R 示例吗?
假设我有这个数据:
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
我可以使用用户编写的命令 tabplot
和 catplot
来单独绘制它们:
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 个图。
有几种方法可以做到这一点。最简单的可能是对数据进行简单的重组。按照你的例子,我假设一个先验 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