我目前有一个格式为:(x,y,type)
的数据集我使用了示例of plotting with Postgres through R.
中的代码我的问题是:如何让R为每个唯一的“类型”列生成多个图形?
我是R的新手,所以我的appologies如果这是非常简单的事情,我只是缺乏对R的循环的理解。
所以我们假设我们有这些数据:
(1,1,T), (1,2,T), (1,3,T), (1,4,T), (1,5,T), (1,6,T),
(1,1,A), (1,2,B), (1,3,B), (1,4,B), (1,5,A), (1,6,A),
(1,1,B), (1,2,B), (1,3,C), (1,4,C), (1,5,C), (1,6,C),
它将在页面上绘制4个单独的图形。每种类型T,A,B和C一个。[绘制x,y]
当进入的数据看起来像上面的数据时,我如何用R做?
答案 0 :(得分:6)
虽然另一篇文章有一些很好的信息,但有一种更快的方法可以做到这一切。因此,假设您的数据框或矩阵称为DF
,并且位于上面的表单中(其中每个(1,2,B)
或其他任何行),则:
by(DF, DF[,3], function(x) plot(x[,1], x[,2], main=unique(x[,3])))
就是这样。
如果您希望所有四个图表都在同一页面上,您可以先更改图形par
amter选项:
par(mfrow=c(2,2))
完成后返回默认par(mfrow=c(1,1)
。
答案 1 :(得分:4)
我非常喜欢ggplot2
包,它与用户1717913的建议相同,但语法略有不同(它很好地做了很多其他事情,这就是我喜欢的原因。)
test <- data.frame(x=rep(1,18),y=rep(1:6,3),type=c("T","T","T","T","T","T","A","B","B","B","A","A","B","B","C","C","C","C"))
require(ggplot2)
ggplot(test, aes(x=x, y=y)) + #define the data that the plot will use, and which variables go where
geom_point() + #plot it with points
facet_wrap(~type) #facet it by the type variable
答案 2 :(得分:1)
R
非常酷,因为有大量(这是技术术语)不同的方式来做大多数事情。我的方法是沿着组拆分数据,然后按组绘制
为此,split
命令就是您想要的(我假设您的数据位于名为data
的对象中):
data.splitted <- split(data, data$type)
现在数据将具有此形式(假设您有3种类型,A,B和C):
data.splitted
L A
| L x y type
| 1 4 A
| 3 6 A
L B
| L x y type
| 3 3 B
| 2 1 B
L C
L x y type
4 5 C
5 2 C
等等。您可以在A组的y列中引用“4”,如下所示:
data.splitted$A$y[1]
或data.splitted[[1]][[2]][1]
希望将它们放在一起就足够了。
既然我们已经将数据拆分了,我们就越来越近了
我们仍然需要告诉R
我们想要将一堆图形绘制到同一个窗口。现在,这只是一种方法。您还可以告诉它将每个图形写入图像文件,pdf或任何您想要的任何图形
groups <- names(data.splitted)
将您的不同类型放入变量中供以后参考。
par(mfcol=c(length(groups),1))
使用mfcol垂直填充图形。 mfrow选项水平填充。 c()
只是结合输入。 length(groups)
返回组的总数
现在我们可以处理for循环了。
for(i in 1:length(data.splitted)){ # This tells it what i is iterating from and to.
# It can start and stop wherever, or be a
# sequence, ascending or descending,
# the sky is the limit.
tempx <- data.splitted[[i]][[x]] # This just saves us
tempy <- data.splitted[[i]][[y]] # a bunch of typing.
plot(tempx, tempy, main=groups[i]) # Plot it and make the title the type.
rm(tempx, tempy) # Remove our temporary variables for the next run through.
}
所以你看,当你把它分解成它的组件时,它并不是太糟糕。你可以用这种方式做任何事情。我现在有一个项目正在进行中,我正在使用另一个 for循环计算的18个激光雷达指标。 阅读的命令:
split, plot, data.frame, "[",
par(mfrow=___) and par(mfcol=___)
Here's few有用links让您入门。尽管如此,最有帮助的是内置于R
。一个?
后跟一个命令将在浏览器中显示该命令的html帮助
祝你好运!