将列名称应用于函数中的图例

时间:2019-07-05 20:09:42

标签: r plot

我正在编写一个函数,该函数接受两个变量(理想情况下是来自同一数据帧的列)并将其绘制出来。该图还将使用来自列的名称来包含图例,这就是我遇到的困难。

下面的代码尽可能地接近期望的结果。我只对使用基数R感兴趣。

plotpairs <- function(x,y){
  plot(x, type = "l", col = "red")
  lines(y, type = "l", col = "blue")
  legend(0,ylim_max, legend = paste0(x, y), lwd = c(5,5), col = c("red", "blue"), bty = "n")
}

plotpairs(df$F3, df$F4)

enter image description here

3 个答案:

答案 0 :(得分:1)

如果提供data.framematrix作为参数,则可以使用colnames()提取列名,否则必须使用deparse(substitute())或{{1} },就像我在这里使用的一样。

match.call()

enter image description here

答案 1 :(得分:1)

这将绘制作为第一个参数给出的数据框中指示的列,或者如果未给出名称,则将绘制前两列。请注意,我们首先使用type = "n"一起绘制两个图,以确保将图设置得足够大以容纳两个变量。该示例使用内置数据帧trees

plotpairs <- function(data, name1 = names(data)[1], name2 = names(data)[2]) {
  both <- c(data[[name1]], data[[name2]])
  plot(seq_along(both) / 2, both, type = "n", xlab = "", ylab = "")
  lines(data[[name1]], type = "l", col = "red")
  lines(data[[name2]], type = "l", col = "blue")
  legend("topleft", legend = c(name1, name2), lwd = 5, 
    col = c("red", "blue"), bty = "n")
}

plotpairs(trees, "Girth", "Volume")

screenshot

答案 2 :(得分:0)

我还根据包含正则表达式的@Rui Barradas注释得出了答案。由于我将使用“ df $ F3”之类的输入,因此我可以指望出现“ $”符号,尽管这可能会限制代码的灵活性。

plotpairs <- function(x,y){
xnam <- deparse(substitute(x))
ynam <- deparse(substitute(y))
xnam1 <- substring(xnam, regexpr("[$]", xnam)+1)
ynam1 <- substring(ynam, regexpr("[$]", ynam)+1)
plot(x, type = "l", col = "red")
lines(y, type = "l", col = "blue")
legend("topleft", legend = c(paste0(xnam1), paste0(ynam1)),lwd = c(5,5), col = c("red", "blue"), bty = "n")
}