2

是否有可能在 R 中自动生成图例?真正让我烦恼的一件事是冗余信息,我必须输入这些信息才能显示图例(例如线条颜色,...)

plot(
  c(1:5), c(.7, 2.2, 3.1, 3.9, 5.2),
  col=1,
  pch=3,
  type="b"
)

lines(
  c(1:5), c(1:5),
  col=2,
  pch=6,
  type="o"
)

legend(
  "topleft",
  legend=c("data", "expactation"),
  col=c(1, 2),
  pch=c(3, 6),
  lty=c(2 ,1)
)

我已经在命令plotlines. 如果我不必在图例中再次添加此信息,那就太好了。

例如,是否可以将“线条”对象和“绘图”对象存储在变量中,并且只将这些对象传递给图例(图例在其中找到所需的信息)?

p = plot(...)
l = lines (...)
legend("topleft", p, l)
4

3 回答 3

3

例如,是否可以将“线条”对象和“绘图”对象存储在变量中,并且仅将这些对象传递给图例(图例找到所需信息的位置)

不容易。但是,ggplot2 为您提供了此功能。例如,

##Create some data and load the library
dd = data.frame(x = c(1:5,1:5), y = c(.7, 2.2, 3.1, 3.9, 5.2, 1:5), 
                type=rep(c("data", "expectation"), each=5))

require(ggplot2)

接下来我们创建一个plot对象`:

##Legend is automatically generated
g = ggplot(data=dd, aes(x = x, y=y)) + 
    geom_point(aes(colour=type, pch=type))
g

不是我们在“绘图对象”中添加一些行:

g + geom_line(aes(colour=type, pch=type))
于 2012-11-02T09:33:50.600 回答
2

不,不是没有大量的工作和一个包装plot函数,这样你就可以记录一次指定的样式并将它们传递给各种绘图函数和图例。

ggplot2和lattice包是更高级别的方法,在这些方法中,这类事情为您自动完成。

于 2012-11-02T09:34:50.057 回答
0

如果您希望它看起来像您的情节,则需要自定义图例。Lattice 在技术上得到了auto.key选项,但它为您提供了丑陋的默认颜色和点类型。但是您可以在制作绘图之前轻松存储参数的值,然后将它们传递给相应的参数。下面是一个格子的例子:

#your example data
d <- data.frame(a=rep(1:5,2), b=c(.7, 2.2, 3.1, 3.9, 5.2, 1, 2, 3, 4, 5), 
                c=rep(c("data", "expactation"),each=5))
#your `pch` and 'col` you pass to the plot
pch.a <- c(3,6)
col.a <- 1:2
library(lattice)
xyplot(a ~ b, groups=c, data = d, type="o", col=col.a, pch=pch.a, aspect=1/2,
       key = list(points=list(pch=pch.a, col=col.a), text=list(levels(d$c))))

在此处输入图像描述

于 2012-11-02T12:40:35.307 回答