2015-09-04 145 views
1

我的代碼:如何將圖例添加到多個條形圖?

#!/usr/bin/R 

par(mfrow=c(4,1)) 

fcm <-c(13.0,12.5,11.8) 
gk <-c(10.9 , 10.5 , 10.2) 
gg <-c(12.0 , 11.0 , 10.8) 
data1 <- rbind(fcm,gk,gg) 
colnames(data1) <- c(5,6,7) 

fcm <-c(1.29,1.25,1.22) 
gk <-c(1.19,1.05,1.00) 
gg <-c(1.10,1.02,1.07) 
data2 <- rbind(fcm,gk,gg) 
colnames(data2) <- c(5,6,7) 

fcm <-c(10.5,9.8,8.8) 
gk <-c(11.0,8.4,10.0) 
gg <-c(2.0,1.8,1.6) 
data3 <- rbind(fcm,gk,gg) 
colnames(data3) <- c(5,6,7) 

fcm <-c(0.33,0.29,0.31) 
gk <-c(0.49,0.40,0.35) 
data4 <- rbind(fcm,gk) 
colnames(data4) <- c(5,6,7) 

barplot(as.matrix(data1),ylim=c(0,20),main="P wave", 
     xlab="number of clusters", ylab="traveltime rms(ms)", 
     col=c("red", "black", "green"), beside=TRUE) 
barplot(as.matrix(data2),ylim=c(0,2),main="MT", 
     xlab="number of clusters", ylab="MT functions", 
     col=c("red", "black", "green"), beside=TRUE) 
barplot(as.matrix(data3),ylim=c(0,20),main="XBI", 
     xlab="number of clusters", ylab="index value", 
     col=c("red", "black", "green"), beside=TRUE) 
barplot(as.matrix(data4),ylim=c(0,0.6),main="NCE", 
     xlab="number of clusters", ylab="index value", 
     col=c("red", "black"), beside=TRUE) 

legend(legend = c("fcm","gk","gg"), fill = c("red", "black", "green")) 

dev.copy(png,"dp.png",width=9,height=6,units="in",res=200) 
dev.off() 

我已經嘗試了傳說中的右上方,但它重疊image.Anyone知道如何添加傳說,位置也不是那麼進口只是爲了visible.I正在提交這對一個科學雜誌我需要一個不錯的佈局。

+1

它必須是基礎R?或者它可以是ggplot?最好的方法可能是在底部或頂部有四個分組圖像和一個圖例。一般來說,紅色和綠色不是很好用,不是每個人都能看到它們之間的對比。 – Heroka

+0

@Heroka它可以是ggplot我很好。 –

+1

如果你正在使用R gui,那麼有關這個傳說的一件事就是它第一次寫入dev.new()這個傳說非常巨大,而且都是奇怪的。其他一些選項是調整開發窗口的大小,然後重新運行代碼,圖例的大小將發生顯着變化。或者,您也可以將圖表寫入一個文件(例如:pdf(width = 11,height = 8.5)for landscape)。 – darwin

回答

1

您可以使用layout代替par(mfrow...),然後在需要的位置添加圖例。我的每個主要地塊佔據兩行,而傳說中的每一行都在底部。

本示例將圖例水平放置在底部。不幸的是,我無法上傳圖片,因爲我在防火牆後面。

layout(matrix(c(1, 1, 2, 2, 3, 3, 4, 4, 5), ncol=1)) 

# main plots 
par(mai=rep(0.5, 4)) 
fcm <-c(13.0,12.5,11.8) 
gk <-c(10.9 , 10.5 , 10.2) 
gg <-c(12.0 , 11.0 , 10.8) 
data1 <- rbind(fcm,gk,gg) 
colnames(data1) <- c(5,6,7) 

fcm <-c(1.29,1.25,1.22) 
gk <-c(1.19,1.05,1.00) 
gg <-c(1.10,1.02,1.07) 
data2 <- rbind(fcm,gk,gg) 
colnames(data2) <- c(5,6,7) 

fcm <-c(10.5,9.8,8.8) 
gk <-c(11.0,8.4,10.0) 
gg <-c(2.0,1.8,1.6) 
data3 <- rbind(fcm,gk,gg) 
colnames(data3) <- c(5,6,7) 

fcm <-c(0.33,0.29,0.31) 
gk <-c(0.49,0.40,0.35) 
data4 <- rbind(fcm,gk) 
colnames(data4) <- c(5,6,7) 

barplot(as.matrix(data1),ylim=c(0,20),main="P wave", 
     xlab="number of clusters", ylab="traveltime rms(ms)", 
     col=c("red", "black", "green"), beside=TRUE) 
barplot(as.matrix(data2),ylim=c(0,2),main="MT", 
     xlab="number of clusters", ylab="MT functions", 
     col=c("red", "black", "green"), beside=TRUE) 
barplot(as.matrix(data3),ylim=c(0,20),main="XBI", 
     xlab="number of clusters", ylab="index value", 
     col=c("red", "black", "green"), beside=TRUE) 
barplot(as.matrix(data4),ylim=c(0,0.6),main="NCE", 
     xlab="number of clusters", ylab="index value", 
     col=c("red", "black"), beside=TRUE) 

# legend for blank plot 
par(mai=c(0,0,0,0)) 
plot.new() 
legend(legend = c("fcm","gk","gg"), fill = c("red", "black", "green"), 
    "center", horiz=TRUE) 

Output plot with xlab showing

+0

非常感謝,但問題是xlab和ylab標籤消失。圖本身是完美的。 –

+0

不客氣。我用'par(mai = rep(0.5,4))'增加了一點餘量空間,我現在可以看到xlab和ylab。您可以根據需要使用這些參數或佈局矩陣,例如佈局(矩陣(c(rep(1,3),rep(2,3),rep(3,3),rep(4,3) ,5),ncol = 1)) – Whitebeard