我想根據它們的大小(即組中數據框中的觀察次數)在barplot中標記每個框。R每個樣本的barplot標籤大小
例如,如果第一個變量有3個級別,第二個變量有4個級別,我想要12個標籤。
(而且,是有可能的大小來控制或這些標籤的位置)
感謝您的任何幫助。
我想根據它們的大小(即組中數據框中的觀察次數)在barplot中標記每個框。R每個樣本的barplot標籤大小
例如,如果第一個變量有3個級別,第二個變量有4個級別,我想要12個標籤。
(而且,是有可能的大小來控制或這些標籤的位置)
感謝您的任何幫助。
下面介紹一種方法,以數據VADeaths
爲例(默認情況下,它將在您的R工作區中,如果沒有,則使用library(datasets)
)。
bar <- barplot(VADeaths)
text(rep(bar,each=nrow(VADeaths)), as.vector(apply(VADeaths,2,cumsum)),
labels=as.vector(apply(VADeaths,2,cumsum)),pos=3)
它看起來像這樣:
要修改字體的大小,您可以使用text(...,cex=2)
,使事情的兩倍,他們的尺寸,例如
現在,我們來解釋一下這段代碼,讓你知道如何自己做!
首先,讓我們來看看VADeaths
:這是按類別死亡人數各年齡組的計數:
> VADeaths
Rural Male Rural Female Urban Male Urban Female
50-54 11.7 8.7 15.4 8.4
55-59 18.1 11.7 24.3 13.6
60-64 26.9 20.3 37.0 19.3
65-69 41.0 30.9 54.6 35.1
70-74 66.0 54.3 71.1 50.0
現在,做就barplot文本,我們基本上得出barplot,並然後使用R命令text
在頂部繪製文本(請參見?text
)。
text
要求在條形圖上繪製x,y座標和相應的文本段。我們會給它的條形圖中每一行的座標來繪製文本。
爲此,請參閱「值」部分?barplot
。此功能不僅繪製您的柱狀圖,而且還會返回每個柱的x座標。得分了!
> bar <- barplot(VADeaths)
> bar
[1] 0.7 1.9 3.1 4.3
現在我們只需要y座標就可以使用我們的x座標。
好吧,隨着你的進展,一個疊加的條形圖只會對VADeaths
中的頻率進行統計。 例如,在'農村男性'組中,第一行是11.7
,第二行是11.7 + 18.1 = 29.8
,第三位是11.7 + 18.1 + 26.9 = 56.7
,依此類推(請參閱VADeaths
中的值)。
所以,我們的y座標需要累積和。
要計算每列的這些值,我們可以使用cumsum
。例如
> cumsum(c(1,2,3,4,5))
[1] 1 3 6 10 15
因爲我們想在VADeaths
做到這一點爲每列,我們要使用的功能apply
。
> apply(VADeaths,2,cumsum)
Rural Male Rural Female Urban Male Urban Female
50-54 11.7 8.7 15.4 8.4
55-59 29.8 20.4 39.7 22.0
60-64 56.7 40.7 76.7 41.3
65-69 97.7 71.6 131.3 76.4
70-74 163.7 125.9 202.4 126.4
apply(VADeaths,2,cumsum)
意思是: 「對於VADeaths
每一列,計算該cumsum
」。 這給出了條形圖每一行的y值。
讓我們保存這些yvalues進一步使用:
> yvals <- as.vector(apply(VADeaths,2,cumsum))
我用as.vector
的原因僅僅是矩陣平面化爲價值的載體 - 它使繪圖更容易。最後一件事 - 我的x值(我存儲在bar
中)每條只有一個值,但我需要擴展它,所以每個條上每行有一個x值。要做到這一點:
> xvals <- rep(bar,each=nrow(VADeaths))
這令我以前x1,x2,x3,x4
爲x1,x1,x1,x1,x1, x2,x2,x2,x2,x2, ..., x4,x4,x4,x4,x4
。 現在我的xvals
匹配我的yvals
。
之後,它只是一個使用text
的情況。
> text(xvals, yvals, labels=yvals, pos=3)
的labels
參數告訴text
什麼文字把在X/Y位置。 pos=3
的意思是「繪製每一點的文本剛好超過我指定的x/y值」。否則,數字將被繪製在難以閱讀的條線上。
現在,有很多選項可以自定義文本的位置和大小,並且我建議您閱讀?text
以查看它們。
所有這些代碼凝結下來到二襯我在答案的開始了,但是這個版本可能會多一點理解:
bar <- barplot(VADeaths)
xvals <- rep(bar,each=nrow(VADeaths))
yvals <- as.vector(apply(VADeaths,2,cumsum))
text(xvals, yvals, labels=yvals, pos=3)
非常感謝你 – jinni