如何从coplot()中选择一个图,或如何绘制特定的子集

时间:2017-12-05 12:40:06

标签: r plot subset

我试图像这样使用coplot

coplot(lat ~ long | depth, data = quakes)

哪个产生这个" This is a scatter plot for each level of depth

然而,这将给出每个调节变量水平的图。我想得到一个完整的散点图而不显示变量的级别。例如,类似于:

enter image description here

我该如何自定义?有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

看起来你真正想要的是绘制一个子集。数据的子集如何变化取决于它的形式(向量,矩阵,数据帧,列表;数字,逻辑,字符)。这将适用于data(quake)等数字数据框。

首先,您需要了解[]的功能。如果您搜索Extract的帮助,您将找到有关它及其兄弟姐妹的信息。 []用于根据每个维度的索引从矢量,矩阵,数据框和任何维度的数组中提取元素,每个维度用逗号分隔。

假设你有一个向量vec <- c(1, 3, 2, 6, 4)。向量只有一个维度,因此您不必担心要处理的维度。 vec[3]将返回2,地点的值或索引,向量中的3,左起第三个元素。 vec[5]将返回第五个元素:4,而vec[c(2, 1, 4)]将按顺序返回第二个,第一个和第四个元素。

在处理矩阵和数据帧时,我们处理两个维度,通常称为行和列。使用[]时,尺寸将始终如下:[rows, columns]。让我们创建一个矩阵。

mat <- matrix(c(9, 8, 7
                6, 5, 4
                3, 2, 1), nrow=3, byrow=TRUE)
mat
#      [,1] [,2] [,3]
# [1,]    9    8    7
# [2,]    6    5    4
# [3,]    3    2    1

在顶部和底部有[]个,其中带有数字,指的是每个维度的索引。您还会注意到,在旁边,数字位于逗号前面,表示行,而在顶部,数字位于逗号后面,表示列。

如果我致电mat[3, ]mat[, 2]会怎样?好吧,我得到相应行或列中的每个元素。 如果我们想在上面的矩阵中提取4怎么办?那么它的行是nr 2,它的列是nr 3,所以它可能只是mat[2, 3]?为什么是的,它是! 我们现在几乎就在那里,只有其他要显示的是我们可以按名称引用行和列,而不仅仅是索引。上面的矩阵没有任何维度名称,因此我们必须添加它们。

rownames(mat) <- c("r1", "r2", "r3")
colnames(mat) <- c("c1", "c2", "c3")
mat
#    c1 c2 c3
# r1  9  8  7
# r2  6  5  4
# r3  3  2  1

现在mat[,"c2"]将返回名为c2的列,mat["r1"]将返回名为r1的行。

quakes
假设我们想要绘制距离超过400公里的所有地震。

提取该子集的一种直接方法可能是

quakes.sub <- quakes[quakes[,"depth"] > 400, c("long", "lat")]

此处唯一的新功能是>,在这种情况下会问:&#34; quakes[,"depth"]中的值是否大于400?&#34;。对于每一个是,返回TRUE,并且每个都没有FALSE。只有返回TRUE的列才会包含在子集中。

要绘制您只需要

的子集
plot(quakes.sub)

enter image description here

这只是一个开始。您可以使用with()来避免多次输入quakes,使用which()更优雅地处理NA和条件(< },>==)可以使用逻辑运算符(不是:!和:&或:|)进行堆叠,从而实现更高级子集规则。

rows <- with(quakes, which(depth < 400 &
                           depth > 100 &
                             mag > 4.3 &
                        stations > 20))
quakes.sub <- quakes[rows, c("long", "lat")]

plot(quakes.sub)

enter image description here