【问题标题】:Automatically generate legend for graphs in r?自动为 r 中的图形生成图例?
【发布时间】:2012-11-02 09:28:37
【问题描述】:

是否有可能在 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 中提供了有关线条颜色的信息...。如果我不必在图例中再次添加此信息,那就太好了。

例如,是否可以将“lines”-Object 和“plot”-object 存储在一个变量中,并且只将这些对象传递给 legend(其中 legend 找到所需信息)?

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

【问题讨论】:

  • 试试看ggplot2
  • 如答案所示,您需要做很多工作。考虑到您可以选择创建一个具有与图表本身不同大小的符号(或线宽)的图例,以便清楚起见,或者您可能希望指示所有虚线,无论颜色如何,都引用一组变量等。所以首先,您不太可能拥有通用的“自动图例”格式。在这方面,R 比 E--l(一个未命名的电子表格应用程序)要好得多。

标签: r styles plot legend


【解决方案1】:

例如是否可以存储“行”-对象和 “绘图”- 变量中的对象,仅将这些对象传递给图例 (图例找到所需信息的地方)

不容易。但是,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))

【讨论】:

    【解决方案2】:

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

    ggplot2lattice 包是更高级别的方法,在其中为您自动完成。

    【讨论】:

      【解决方案3】:

      如果您希望图例看起来像您的情节,您需要自定义它。 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))))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 1970-01-01
        • 2020-09-25
        • 1970-01-01
        相关资源
        最近更新 更多