假設(shè)我有一個如下的數(shù)據(jù)幀:
P Q1 Q2 ...
1 1 4 1
2 2 3 4
3 1 1 4
列告訴我哪個人回答了問題q1,q2。。。相應(yīng)地。這些問題需要一個4分likert量表的答案(例如,“批準(zhǔn)”表示1,“輕微批準(zhǔn)”表示2,依此類推)。如何繪制(例如,兩個問題的結(jié)果以%為單位)堆積條形圖?
應(yīng)該是這樣的。
所有我在網(wǎng)上找到的是非常復(fù)雜的代碼,我不能處理或無法理解。。。不是只有一個簡單的函數(shù)能滿足我的需要嗎?
Thank you!
我相信我不是唯一一個對你的這部分問題有異議的人:
“非常復(fù)雜的代碼”是相當(dāng)主觀的。然而,我可以理解,學(xué)習(xí)代碼和試圖弄清楚如何去做你想做的事情(一開始可能看起來很簡單)可能會讓人望而生畏和沮喪。我將嘗試向您展示如何以非常邏輯和清晰的方式處理此問題,以便您能夠理解這里顯示的代碼實際上并不太復(fù)雜。
The Dataset
OP沒有提供數(shù)據(jù)集,但我將在這里演示一個隨機的數(shù)據(jù)集。這也是一個展示如何通過代碼生成此類數(shù)據(jù)(并使其可擴展)的好機會。假設(shè)我們有20個人回答20個問題。我將在數(shù)據(jù)框架結(jié)構(gòu)中創(chuàng)建數(shù)據(jù),首先只提供一列人員,然后在此基礎(chǔ)上添加20列問題。問題答案的每個單元格將從1到5中隨機選擇一個答案。
這給了我們一個20行21列的數(shù)據(jù)框(1列表示個人+20列表示問題)。
準(zhǔn)備數(shù)據(jù)
在準(zhǔn)備生成繪圖時,幾乎總是要以某種方式準(zhǔn)備數(shù)據(jù)。在我們策劃之前,我只想先做兩件事。第一步是使我們的數(shù)據(jù)成為一種稱為整潔數(shù)據(jù)的格式。以我們現(xiàn)在的格式。。。在Excel中繪圖是可以的,但是如果我們想有一種高質(zhì)量的方法來組織和匯總這些數(shù)據(jù),我們希望以一種“更長”的表格格式來組織它。我們需要的是以一種列的方式組織:
你可以用幾種方法。在這里我使用
dplyr
和tidyr
包和gather()
函數(shù),但還有其他方法(即使用pivot_longer()
):這里我要做的最后一件事是將列
questions$Answer
轉(zhuǎn)換成一個分類變量,而不是一個連續(xù)數(shù)。為什么?參與者只能回答1、2、3、4或5。回答“3.4”是沒有意義的,所以我們的數(shù)據(jù)應(yīng)該是離散的,而不是連續(xù)的。我們將把questions$Answer
轉(zhuǎn)換成一個因子。這也允許我們同時做兩件非常有用的事情:levels
-這表示您希望因子的級別的順序。labels
-這允許您將1
重新映射為"Approve"
,2
為"Slightly Approve"
,依此類推。然后可以檢查后面的數(shù)據(jù),
questions$Answer
列現(xiàn)在由labels()
值組成,而不是數(shù)字。制造情節(jié)
然后我們可以使用
ggplot2
包來繪制圖。GGplot使用geoms
將數(shù)據(jù)繪制到繪圖區(qū)域。在本例中,我們可以使用geom_bar()
,它將繪制一個條形圖(合計每個項目的數(shù)量/計數(shù)),并且只需要x
美學(xué)。如果我們將每個條的fill
顏色設(shè)置為等于Answer
列,那么它將color-code條與每個問題的每個答案的編號相關(guān)聯(lián)。默認(rèn)情況下,這些條按我們之前為questions$Answer
列的levels
參數(shù)設(shè)置的順序堆疊在一起。這個地塊有很多東西是對的,總體布局看起來不錯。剩下的就是在幾個方面改變外觀。我們可以通過擴展繪圖代碼來改變繪圖的這些方面。也就是說,我想做以下幾點:
完整的繪圖代碼如下所示。您應(yīng)該能夠識別代碼的哪些部分正在執(zhí)行上面提到的每一件事情。
很酷吧?
至于“有沒有一個簡單的函數(shù)能滿足我的要求?”。答案是“不”。您可以編寫一個,但這可能取決于數(shù)據(jù)最初的格式。如果您需要經(jīng)常繪制這些繪圖,請設(shè)置一個R腳本來自動為您繪制這些繪圖:)。