2010-11-08 31 views
15

我在R中創建了一個直方圖,它顯示了矢量中幾個事件的頻率。每個事件由[1,9]範圍內的整數表示。我在圖表的垂直下方顯示每個計數的標籤。這裏的代碼:如何讓我的垂直標籤適合我的繪圖窗口?

hist(vector, axes = FALSE, breaks = chartBreaks) 
axis(1, at = tickMarks, labels = eventTypes, las = 2, tick = FALSE) 

不幸的是,標籤太長,所以他們被窗口的底部切斷。我如何讓它們可見?我甚至使用正確的圖表嗎?

回答

8

這聽起來不像直方圖的工作 - 事件不是一個連續變量。 barplot或dotplot可能更適合。

某些僞數據

set.seed(123) 
vec <- sample(1:9, 100, replace = TRUE) 
vec <- factor(vec, labels = paste("My long event name", 1:9)) 

甲barplot經由barplot()函數產生 - 我們提供它使用用於方便table()函數的每個事件的計數。在這裏,我們需要旋轉使用las = 2標籤和

## lots of extra space in the margin for side 1 
op <- par(mar = c(10,4,4,2) + 0.1) 
barplot(table(vec), las = 2) 
par(op) ## reset 

點陣圖通過功能dotchart()生產並具有分選出來的情節利潤率爲我們

dotchart(table(vec)) 
的更加方便的保證金創建標籤的一些額外的空間

dotplot比barplot的優勢在於使用更少的墨水來顯示相同​​的信息,並關注組間計數的差異而不是計數的大小。

請注意我如何將數據設置爲一個因子。這使我們可以將事件標籤存儲爲該因子的標籤 - 從而自動執行繪圖中軸的標註。這也是存儲數據的一種很自然的方式,就像我理解你擁有的那樣。

+0

如果有人使用hist(),那麼減小標籤大小的方法是使用cex.axis。它看起來與barplot使用相同的繪圖參數,但在測試回答後,它看起來是cex.names,因爲在barplot()中「數字」標籤似乎與「字符」不同。 – 2010-11-09 02:37:50

+0

條形標籤和計數軸標籤是通過對'axis()'的兩次單獨調用繪製的。當在外部調用par()時設置'cex.axis'會改變這兩個標籤,因爲'cex.axis'和'cex.name'採用'par(「cex.axis」)'作爲默認值。如果你向'barplot()'調用'cex.axis',你並沒有改變'par(「cex.axis」)',因此標籤不會改變大小。在'hist()'中,您正在繪製兩個同時繪製的數字軸,因此都受到'cex.axis'的影響。 – 2010-11-09 09:00:36

9

查看help(par),特別是mar(保證金)和oma(對於外部保證金)。 這可能是這麼簡單

par(mar=c(5,3,1,1)) # extra large bottom margin 
hist(vector, axes = FALSE, breaks = chartBreaks) 
axis(1, at = tickMarks, labels = eventTypes, las = 2, tick = FALSE) 
+0

我知道有這個一個簡單的解釋,但無論我做什麼用月,OMA,或OMI,沒有什麼變化。我試着用par()設置它並將它傳遞給hist();沒有骰子。 – 2010-11-08 22:29:36

+4

嘗試'par(mar = c(9,4,4,2)+ 0.1)'---第1面的默認邊距是5,所以Dirk的示例實際上並沒有爲第1面創建比正常大的東西---它比正常情況下減少了-4。你只能通過調用'par()'來設置'mar','oma'等。 – 2010-11-08 23:21:57

0

也許添加\ n爲進你的標籤,這樣他們就會換到2號線?這不是最佳的,但它可能工作。

0

你可能想看看這個post從交叉驗證