【发布时间】:2014-07-22 17:29:34
【问题描述】:
我想根据我在 CSV 中的数据(看起来像这样)将多个图放在 R 中的单个可视输出上:
user,size,time
fred,123,0.915022
fred,321,0.938769
fred,1285,1.185608
wilma,5146,2.196687
fred,7506,1.181990
barney,5146,1.860287
wilma,1172,1.158015
barney,5146,1.219313
wilma,13185,1.455904
wilma,8754,1.381372
wilma,878,1.216908
barney,2974,1.223852
我可以很好地阅读这个,例如:
data = read.csv('data.csv')
目前,一个相当简单的情节很好,所以我只是尝试plot(),没有太多内容(设置type='o' 以获取线和点),并且'从解决过去的问题,我知道我可以执行以下操作来获取刚刚 fred 的数据:
plot(data$time[which(data$user == 'fred')], data$size[which(data$user == 'fred')], type='o')
不过,我想要的是让每个用户的数据都显示在一组轴上,并使用颜色编码(以及将用户与颜色匹配的图例)来识别不同的用户数据。
如果另一个用户出现,我希望显示另一行,使用另一种颜色(如果我同时有太多用户,也许可以回收)。
但是,这并没有做到这一点:
plot(data$size, data$time, type='o',col=c("red", "blue", "green"))
因为它似乎没有按用户分组。
只有这个:
plot(data, type='o')
给我一个错误:
Error in plot.default(...) :
formal argument "type" matched by multiple actual arguments
这个:
plot(data)
确实做了一些事情,但不是我想要的。
我已经四处寻找,但我对 R 还不够陌生,所以我不太确定如何最好地搜索它,也不知道在哪里寻找会遇到这样的用例的示例。
我什至更接近了:
plot(data$size[which(data$user == 'wilma')], data$time[which(data$user == 'wilma')], type='o', col=c('red'))
lines(data$size[which(data$user == 'fred')], data$time[which(data$user == 'fred')], type='o', col=c('green'))
lines(data$size[which(data$user == 'barney')], data$time[which(data$user == 'barney')], type='o', col=c('blue'))
这给了我一个情节(我会在线发布,但作为一个新用户,我还不能这样做):
这有点接近我想要的,除了它:
- 没有图例
- 有丑陋的轴标签,而不仅仅是时间和大小
- 缩放到第一个图,因此缺少其他一些图的数据
- 不按 x 轴排序,我可以在外部执行此操作,但我猜我可以在 R 中相当轻松地执行此操作。
所以,最终的问题是:
有什么简单的方法来绘制这样的数据:
- 根据 CSV 第一列中的标签包含多行
- 对第 2 列和第 3 列中的数据使用相同的轴集,而不考虑标签
- 具有标签用于特定线(或点集)的图例和颜色编码
- 将适应向数据文件添加新标签,希望不会更改 R 代码。
在此先感谢您提供任何帮助或指点。
附:我四处寻找类似的问题,发现one that's sort of close,但它并不完全相同,我无法弄清楚如何使其适应我正在尝试做的事情。
【问题讨论】: