使用R绘制多个图

时间:2012-11-08 18:58:02

标签: r graph

我目前有一个格式为:(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做?

3 个答案:

答案 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

enter image description here

答案 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帮助 祝你好运!