我试图像这样使用coplot
:
coplot(lat ~ long | depth, data = quakes)
然而,这将给出每个调节变量水平的图。我想得到一个完整的散点图而不显示变量的级别。例如,类似于:
我该如何自定义?有什么帮助吗?
答案 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)
这只是一个开始。您可以使用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)