在R中为多个图形创建图例

时间:2014-11-26 03:29:56

标签: r

我编写了一些代码,从文本文件中读取一些数据,将其转换为矩阵,并在单独的图形中绘制矩阵的每一列:

#Read data from txt file into table and convert table into matrix
excMatrix = as.matrix(read.table("/Users/Kane/Desktop/Gujarati/Table 1.3.txt", header = TRUE, row.names = 1))

#Plotting function
excPlot = function(x) {
  plot(row.names(excMatrix),x,xlab = "Year", ylab = "Exchange rate (US)", type = "l")
  legend("topright", legend = "something to get column names for legend", pch = 1, col = 1:2, bty = "n")
}

#Plot exchange rates from various countries on seperate graphs
apply(excMatrix, 2, excPlot)

当我运行它时,它会生成正确的图形,但我无法弄清楚如何在图例中获取国家/地区的名称,即每个图形是一个单独国家/地区的数据,其名称是矩阵的列。

希望这是有道理的,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

重新排列绘图方法以循环遍历矩阵的colnames将允许此操作。 E.g:

par(mfrow=c(2,2))

excMatrix <- matrix(1:20,ncol=4,dimnames=list(1:5,letters[1:4]))

excPlot = function(x) {
  plot(row.names(excMatrix),excMatrix[,x],xlab = "Year", 
       ylab = "Exchange rate (US)", type = "l")
  legend("topright", 
         legend = x, 
         pch = 1, col = 1:2, bty = "n")
}

lapply(colnames(excMatrix), excPlot)

答案 1 :(得分:0)

我建议使用par(),就像@thelatemail指出的那样。请查看?par。它有许多参数,如边距和大小,供你玩

如果每个图表的图例相同,则可以将legend()代码放在excPlot函数之外。

看一下stackoverflow上的这篇文章:

Common legend for multiple plots in R