使用qplot绘制函数系列而不复制数据

时间:2013-03-31 03:41:52

标签: r plot ggplot2

给定函数族 f(x; q) x 是参数而 q 是参数)我想看看这个 x 上的函数族从 [0,1] 的区间取<9> q (从0.1到0.9)。到目前为止,我的解决方案是:

f = function(p,q=0.9) {1-(1-(p*q)^3)^1024}
x = seq(0.0,0.99,by=0.01)
q = seq(0.1,0.9,by=0.1)

qplot(rep(x,9), f(rep(x,9),rep(q,each=100)), colour=factor(rep(q,each=100)), 
      geom="line", size=I(0.9), xlab="x", ylab=expression("y=f(x)"))

使用 qplot

,我可以快速轻松地进行视觉效果

enter image description here

我担心的是这种方法非常耗费内存,因为我需要为每个参数复制x并复制整个x范围的每个参数值。在没有这些重复的情况下生成相同图形的替代方法是什么?

1 个答案:

答案 0 :(得分:1)

在某些时候, ggplot 需要有可用于绘制数据的数据以及程序包的工作方式禁止简单地执行您想要的操作。如果你知道x和y轴限制,我想你可以设置一个空白图,然后循环q的9个值,生成q的数据,并添加{{1层到现有的绘图对象。但是,您必须自己为每个图层生成颜色。

如果这代表了您遇到的问题的大小,我不会过多担心内存占用。我们只讨论长度为900的两个向量

geom_line

并且> object.size(rnorm(900)) 7240 bytes 范围内的100个值似乎足以给出平滑的图。

x循环将图层添加到 ggplot

for

给出:

enter image description here

我会把剩下的留给你 - 我不熟悉 ggplot 来手动绘制图例。