[英]How to select one plot from coplot(), or how to plot a specific subset
看起來您真正想要的是繪制一個子集。 子集數據的方式會有所不同,具體取決於數據的形式(向量,矩陣,數據框,列表;數字,邏輯,字符)。 這將與諸如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")]
這里唯一的新事物是>
,在這種情況下,它詢問:“ quakes[,"depth"]
中的值是否大於400?”。 對於每個yes,都會返回TRUE
,而對於每個no則返回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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.