2013-12-16 77 views
1

我希望根據數字列表在R中創建1000條垂直條形的條形圖。然後,我希望得到的圖形具有標記爲1-10的x軸,均勻分佈在1000列下方。但是,我只能弄清楚如何標記每一列而不是我想要的方法。這是我目前的代碼:如何在R中爲barplot指定任意x軸值?

scores <- c(my 1000 data points) 
barplot(scores, main="my plot", xlab="my 1000 scores", names.arg=c("list of 1-10")) 

有誰知道是否有可能具有我想要的X軸格式嗎?謝謝!

回答

3

您可以通過命名「分數」做它在正確的地方

scores <- sample(1000) 
names(scores)<-NA 
names(scores)[seq(1, 1000, 111)]<-1:10 
barplot(scores, main="my plot", xlab="my 1000 scores") 

這是如何工作的?

我們將打破這一行:

names(scores)[seq(1, 1000, 111)] <- 1:10 

我們已經在「分數」(NA)

我可以叫這些名字與names(scores)我分配一個名稱的每個值可以調用這些名字的子集與names(scores)[1:10]

現在對於seq(1, 1000, 111) - 這是從1的111

0的步驟的序列,以100

因此names(scores)[seq(1, 1000, 111)]是「分數」名稱的子集 - 具體是數字1,112,223等。

爲什麼我使用111?我們試圖在1000個「插槽」中平均分配10個值。你計算與(1000 - 1)中的步驟/(10 - 1)

對於你的第二個例子(10〜10步100),我們可以簡單地用一組數字seq(10, 100, 10)

通知更換<-1:10length(1:10)length(seq(10, 100, 10))都是10

現在爲您的最後一個例子length(seq(0, 100, 10))

通過包括0,你增加了一個額外的值(合計11),所以我們需要在names(scores)

01使用不同的時隙

(1000 - 1)/(11-1)= 99.9,所以我們需要重新設置名稱

names(scores) <- NA 

然後用新的序列

names(scores)[seq(1, 1000, 99.9)]<-seq(0, 100, 10) 
+0

很好用,謝謝 – jake9115

+0

Ed,我如何編輯'names(scores)[seq(1,1000,111)] < - 1:10'這一行來使範圍從10變爲100而不是1到10? – jake9115

+0

姓名(分數)[seq(1,1000,111)] < - seq(10,100,10) –

1

每個小節的x位置由函數本身返回。所以只需使用xpos <- barplot(...)。 Y值,你可以從par('usr')

計算或使用axis

tmp <- barplot(scores, main="my plot", xlab="my 1000 scores", names.arg=c("")) 
axis(1,at=seq(min(tmp),max(tmp),len=10),lab=1:10) 
+0

約爾格喜設定的名字,感謝幫幫我。你可以請更具體一點,如何使用'xpos < - barplot(..)'我的優勢?我是R新手。 – jake9115