2015-09-24 107 views
0

我想基於頻率創建並排條形圖。 R示例可在Side-by-side bars in bar plot找到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個圖。

+1

「用戶安裝的功能」已被編輯爲「用戶編寫的命令」。 –

回答

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