使用R绘制多个图形

使用R绘制多个图形,r,graph,R,Graph,我目前有一个数据集,其格式为:(x,y,type) 我使用了示例中的代码 我的问题是:如何让R为每个唯一的“类型”列生成多个图 我是R的新手,所以我的观点是,如果这是一件非常简单的事情,我只是缺乏对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,

我目前有一个数据集,其格式为:(x,y,type)

我使用了示例中的代码

我的问题是:如何让R为每个唯一的“类型”列生成多个图

我是R的新手,所以我的观点是,如果这是一件非常简单的事情,我只是缺乏对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实现这一点

R
真的很酷,因为有无数种(这是一个技术术语)不同的方法来做大多数事情。我要做的是将数据沿组分割,然后按组绘制。
为此,您需要使用
split
命令(我假设您的数据位于名为
data
的对象中):

等等。您可以参照A组y列中的“4”,如下所示:

data.splitted$A$y[1]
data.splitted[[1]][[2]][1]
希望看到两者同时出现就足够了

现在我们已经进行了数据拆分,我们离得越来越近了。
我们仍然需要告诉
R
,我们想要在同一个窗口中绘制一组图形。现在,这只是一种方法。您还可以告诉它将每个图形写入图像文件、pdf或任何您想要的内容。

groups虽然另一篇文章有一些好的信息,但有一种更快的方法可以做到这一点。因此,假设您的数据帧或矩阵被称为
DF
,并采用上述形式(其中每个
(1,2,B)
或任何一行),则:

就这样

如果希望所有四个绘图都在同一页上,可以首先更改绘图
par
amter选项:

par(mfrow=c(2,2))

完成后返回默认值
par(mfrow=c(1,1)

我非常喜欢
ggplot2
包,它做的事情与user1717913建议的一样,但语法略有不同(它做了很多其他事情,这就是我喜欢它的原因。)


test尝试提供一个包含数据的小示例,以及您想要制作的图形的一些特定描述。“多个图形”非常模糊。请参阅此链接中的第(4)项和第(9)项:您的数据看起来像:
test它来自PL/R[postgres]但之前的编辑人员声称这与问题无关。这假设您输入的数据只是一个3列矩阵。您可能需要进行一些操作才能将其转换为该形式。它是一个3列矩阵。我之所以问我这样做,是因为[根据我在Matlab中的经验]使用循环并不是最快的方法…他们倾向于做一些事情仅仅是为了让
通过(DF,DF$type,function(x)plot(x$x,x$y))
更安全,因为使用
x[1,]
这样的索引会给@DrewSteen的ggplot答案带来不同的结果。我认为这与
[
返回一片data.frame,而不是一个向量。这还可以防止变量顺序出现任何问题——比如y在x之前。是的,这也是我的偏好。他没有给出
colNames
,我认为它可能是一个矩阵,但
$
是更好的选择=)。有4个以上的图形。每个图形的名称都是类型。你说得对!我把逗号放在了
x[1,]
的错误位置,它应该是
x[,1]
(已编辑)。要根据类型命名每个图形,请将
main=unique(x$type)
main=unique(x[,3])
plot
参数中。它看起来不错,但是如何确保它每页只绘制4个图形呢?它将自动生成尽可能多的面板,只要facetting变量有唯一值(此处,
type
)。如果您希望打印的面板少于此数量,可以向ggplot提供数据的子集:
ggplot(子集(例如,test,type==“A”| type==“B”)…
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
par(mfcol=c(length(groups),1))
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.    
}
split, plot, data.frame, "[", 
par(mfrow=___) and par(mfcol=___)
by(DF, DF[,3], function(x) plot(x[,1], x[,2], main=unique(x[,3])))
par(mfrow=c(2,2))
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