【问题标题】:Formula notation for scatterplot producing unexpected results散点图的公式表示法产生意外结果
【发布时间】:2018-03-29 22:27:53
【问题描述】:

我正在制作一张地图,其中每个点的颜色与一个响应变量成正比,而点的大小与另一个成正比。我注意到,当我尝试使用公式表示法绘制点时,事情变得混乱,而默认表示法按预期执行。我以前曾多次使用公式符号绘制地图,并认为这些符号几乎可以互换。为什么这些会产生不同的结果?我已经阅读了plot.formulaplot.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,虽然有同样的错误。

【问题讨论】:

  • 它必须是数据类型,因为plot(as.numeric(latitude) ~ as.numeric(longitude), data = dat, type = "p", pch = 21, col = 1, bg = color, cex=as.numeric(dat$size)) 对我来说很好用。
  • @mysteRious 你说得对,它运行是对的,但是颜色已经关闭,这仍然令人担忧。但是,如果我按照您的思路运行plot(as.numeric(latitude) ~ as.numeric(longitude), data = dat, type = "p", pch = 21, col = 1, bg = as.vector(dat$color), cex = as.numeric(dat$size)),它就可以工作。所以它肯定是数据类型。

标签: r dataframe plot colors


【解决方案1】:

这有几个问题。首先是您对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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多