2012-05-29 58 views
2

我想畫一個簡單的柱狀圖中,像這樣:漂亮軸與最小值和最大值標籤

test <- data.frame(y=c(1,3,53,10,30,35,50), x=c(1:7)) 
barplot(test$y, names.arg=test$x) 

resulting graph

我的問題是,y軸不遠遠不夠的,如果最大值是一些「沒有價值」的數字。如果軸擴展超過最大值,並且在大於最大值的某個「漂亮」值上完成,那麼會更好。

給定一個隨機數據集(即這是進入一個函數),是否有一個簡單的方法來做到這一點?

+0

我會爲此使用'ggplot'。你需要基地R的解決方案嗎? **編輯** - 這在ggplot中也不容易,儘管'ggplot'在最高的欄上繪製了一個網格線,使得讀取該值非常容易。 – Andrie

+0

我實際上確實需要base R中的解決方案,因爲我將它合併到我自己的函數中,該函數僅將該圖作爲可視化的一部分進行繪製。 – MattLBeck

回答

6

您可以使用pretty()range()組合自動選擇更好的設置ylim

test <- data.frame(y=c(1,3,53,10,30,35,50), x=c(1:7)) 
barplot(test$y, names.arg=test$x, 
     ylim = range(pretty(c(0, test$y)))) 

enter image description here

(感謝加文·辛普森爲指出range(pretty(c(0, test$y)))作品一樣好range(pretty(c(0, max(test$y)))

+0

+1好的答案。 – Andrie

+0

太美了!現在,使用'x11(width = 5,height = 2.2)'作爲輸出設備繪製相同的圖形。爲什麼打印標籤「50」而不是標籤「60」? – MattLBeck

+1

在這種情況下,'pretty(test $ y)'就足夠了 - 不需要調用max()。 –