【问题标题】:How to select one plot from coplot(), or how to plot a specific subset如何从 coplot() 中选择一个图,或如何绘制特定子集
【发布时间】:2017-12-05 12:40:06
【问题描述】:

我正在尝试像这样使用coplot

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

哪个产生这个"

但是,这将为每个条件变量水平绘制一个图。我想得到一个完整的散点图而不显示变量的水平。例如类似这样:

如何自定义?请问有什么帮助吗?

【问题讨论】:

  • 不清楚你想要什么。以什么方式定制什么?
  • 我想要一张图显示 X 和 y 条件对 X 的依赖关系。
  • 您只想绘制一个子集吗? plot(quakes[quakes$lat > -25 ,2:1])
  • @AkselA 非常感谢您的大力帮助。 coplot 根据给定变量的值给我一个绘图矩阵。我只想有一个单一的情节而不是矩阵。那就是我想 `coplot(lat ~ long | depth, data = quakes)` 给我一个单一的情节。
  • 那不也只是一个子集的散点图吗? plot(quakes[quakes$depth > 400 ,2:1])

标签: r plot subset


【解决方案1】:

看起来你真正想要的是绘制一个子集。根据数据的形式(向量、矩阵、数据框、列表;数字、逻辑、字符),您子集数据的方式会有所不同。这将适用于像 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")]

这里唯一的新事物是&gt;,在这种情况下会询问:“quakes[,"depth"] 中的值是否大于 400?”。对于每一个“是”返回一个TRUE,对于每一个“否”返回一个FALSE。只有返回 TRUE 的列才会包含在子集中。

要绘制子集,您只需

plot(quakes.sub)

这当然只是开始。可以使用with()避免多次输入quakes,使用which()会更优雅地处理NA,条件(&lt;&gt;==)可以叠加使用逻辑运算符(不是:!,和:&amp;,或:|),允许更高级的子集规则。

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

plot(quakes.sub)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2019-04-13
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多