我在地图上工作,每个点的颜色与一个响应变量成比例,并且点的大小与另一个成比例。我注意到,当我尝试使用公式表示法绘制点时,事情会变得混乱,而默认表示法会按预期执行。我以前曾多次使用公式表示法绘制地图,并认为这些符号几乎可以互换。为什么会产生不同的结果呢?我已经阅读了plot.formula
和plot.default
文档并且无法弄明白。基于this,我想知道它是否与dat
被强制分解的因素有关,但我不确定为什么会发生这种情况。有任何想法吗?
请考虑以下示例数据框dat
:
latitude <- c(runif(10, min = 45, max = 48))
latitude[9] <- NA
longitude <- c(runif(10, min = -124.5, max = -122.5))
longitude[9] <- NA
color <- c("#00FFCCCC", "#99FF00CC", "#FF0000CC", "#3300FFCC", "#00FFCCCC",
"#00FFCCCC", "#3300FFCC", "#00FFCCCC", NA, "#3300FFCC")
size <- c(4.916667, 5.750000, 7.000000, 2.000000, 5.750000,
4.500000, 2.000000, 4.500000, NA, 2.000000)
dat <- as.data.frame(cbind(longitude, latitude, color, size))
根据公式表示法绘图
plot(latitude ~ longitude, data = dat, type = "p", pch = 21, col = 1, bg = color, cex = size)
产生this mess和以下错误:graphical parameter "type" is obsolete
。
根据默认表示法绘图
plot(longitude, latitude, type = "p", pch = 21, col = 1, bg = color, cex = size)
工作as expected,虽然有同样的错误。
这有几个问题。首先,你使用cbind
将其转变为matrix
,虽然是暂时的,这将你的数字转换为character
。看到:
dat <- as.data.frame(cbind(longitude, latitude, color, size))
str(dat)
# 'data.frame': 10 obs. of 4 variables:
# $ longitude: Factor w/ 9 levels "-122.855375511572",..: 6 8 9 1 4 3 2 7 NA 5
# $ latitude : Factor w/ 9 levels "45.5418886151165",..: 6 2 4 1 3 7 5 9 NA 8
# $ color : Factor w/ 4 levels "#00FFCCCC","#3300FFCC",..: 1 3 4 2 1 1 2 1 NA 2
# $ size : Factor w/ 5 levels "2","4.5","4.916667",..: 3 4 5 1 4 2 1 2 NA 1
如果你只是使用data.frame
,你会得到:
dat <- data.frame(longitude, latitude, color, size)
str(dat)
# 'data.frame': 10 obs. of 4 variables:
# $ longitude: num -124 -124 -124 -123 -124 ...
# $ latitude : num 47.3 45.9 46.3 45.5 46 ...
# $ color : Factor w/ 4 levels "#00FFCCCC","#3300FFCC",..: 1 3 4 2 1 1 2 1 NA 2
# $ size : num 4.92 5.75 7 2 5.75 ...
plot(latitude ~ longitude, data = dat, pch = 21, col = 1, bg = color, cex = size)
但现在颜色都被愚弄了。好吧,问题很可能是因为你的$color
是一个因素,它被内部解释为整数。试试stringsAsFactors=F
:
dat <- data.frame(longitude, latitude, color, size, stringsAsFactors=FALSE)
str(dat)
# 'data.frame': 10 obs. of 4 variables:
# $ longitude: num -124 -124 -124 -123 -124 ...
# $ latitude : num 47.3 45.9 46.3 45.5 46 ...
# $ color : chr "#00FFCCCC" "#99FF00CC" "#FF0000CC" "#3300FFCC" ...
# $ size : num 4.92 5.75 7 2 5.75 ...
plot(latitude ~ longitude, data = dat, pch = 21, col = 1, bg = color, cex = size)