2012-01-24 57 views
2

以下R腳本會生成一個太高而不適合圖的欄。請注意,該條超出y軸,並且其註釋(百分比)未顯示。我如何生成一個條形圖來顯示整個高度條及其註釋?我怎樣才能適應一個barplot高高的酒吧?

png(filename = "plot.png") 
x <- c("A", "B") 
y <- c(2e6 + 10, 400) 
sum_Y <- sum(y) 
midpoints <- barplot(height = y, log = "y") 
text(midpoints, y, sprintf("%.2f%%", y/sum_Y * 100), pos = 3) 
dev.off() 

a bar plot with a tall bar

回答

1

你能做到這一點在ggplot2

library(ggplot2) 
qplot(x,y,geom="bar",log="y") + geom_text(aes(y=y*1.5, label=sprintf("%.2f%%", y/sum_Y * 100))) 

enter image description here

+0

感謝您的及時響應。 y軸的標籤太靠近y軸的標籤。我不熟悉'ggplot2'。你會如何改變'ggplot2'的邊距?我更喜歡簡單的R圖,因爲我更熟悉它們。 – reprogrammer

+0

你的情節不是對數縮放的,是嗎? – reprogrammer

+1

@reprogrammer沒有注意到日誌的尺度,我現在編輯它來包含它。學習'ggplot2'非常值得。這篇文章是一個非常有趣的例子,並展示瞭如何修改頁邊距:http://learnr.wordpress.com/2009/04/23/ggplot2-dont-try-this-with-excel/ – James

5
png(filename = "plot.png") 
x <- c("A", "B") 
y <- c(2e6 + 10, 400) 
sum_Y <- sum(y) 
midpoints <- barplot(height = y, log = "y", ylim=c(5e1,5e6)) 
text(midpoints, y, sprintf("%.2f%%", y/sum_Y * 100), pos = 3) 
dev.off() 

R是相當挑剔什麼它將接受作爲其日誌尺度限制。

enter image description here

+0

我建議你把'ylim'改成'c(1,5e6)'。 – reprogrammer

+0

對不起。我沒有看到這一點。 –

+0

只是爲了與我原來的陰謀的下限保持一致。 – reprogrammer

1

另一種選擇(基於@Dwin ylab調整)是使用plotrix包。如果你想用對數刻度標籤多玩,檢查height.atheight.lab選項barp

require(plotrix) 
png(filename = "plot.png") 
x <- c("A", "B") 
y <- c(2e6 + 10, 400) 
sum_Y <- sum(y) 
midpoints <- barp(height = y, ylog = T, ylim=c(1,5e6)) 
text(y, sprintf("%.2f%%", y/sum_Y * 100), pos = 3) 
dev.off() 

enter image description here

+0

使用'plotrix'到@Dinin的答案有什麼優勢? – reprogrammer

+0

我建議你將ylim改爲c(1,5e6)。我可以增加上限但不改變下限。 – reprogrammer

+0

我會說這是一個_cosmetic_優勢。正如'plotrix'手冊指出的那樣:''ylog''參數在y軸上產生一個對數刻度。目前,既沒有漂亮的也沒有'axTicks'似乎產生了一組很好的座標軸,所以最好在height.at'_中傳遞這些位置。我不認爲你用標準barplot獲得了靈活性。 –

相關問題