我正在运行蒙特卡罗模拟,输出的形式为:
> d = data.frame(iter=seq(1, 2), k1 = c(0.2, 0.6), k2=c(0.3, 0.4))
> d
iter k1 k2
1 0.2 0.3
2 0.6 0.4
我想要生成的图是:
plot(d$iter, d$k1)
plot(density(d$k1))
我知道如何使用 ggplot2 绘制等效图,转换为数据框
new_d = data.frame(iter=rep(d$iter, 2),
k = c(d$k1, d$k2),
label = rep(c('k1', 'k2'), each=2))
那么绘图就很容易了。然而,迭代次数可能非常大,并且 k 的数量也可能很大。这意味着要处理一个非常大的数据框。
无论如何我可以避免创建这个新的数据框吗?
Thanks
简短的回答是“不”,您无法避免创建数据框。ggplot
要求数据位于数据框中。如果你使用qplot
,您可以为 x 和 y 提供单独的向量,但在内部,它仍然根据您传入的参数创建一个数据帧。
我同意朱巴的建议——学会使用reshape
函数,或者更好的是reshape
封装有melt
/cast
功能。一旦您能够快速将数据以长格式存储,就能创造出令人惊叹的ggplot
图表变得更近了一步!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)