【问题标题】:Legend label showing the same interval more than once图例标签多次显示相同的间隔
【发布时间】:2025-12-21 05:00:11
【问题描述】:

我正在 R 中制作阴影图。图例为零和缺失创建单独的类别,但将它们都标记为“[0,0)”

知道如何解决这个问题吗?

library(gpclib)
library(maptools)     # loads sp library too
library(RColorBrewer) # creates nice color schemes
library(classInt)     # finds class intervals for continuous variables


CAcounty.shp <- readShapePoly(file.choose(),proj4string=CRS("+proj=longlat"))

 plotvar <- CAcounty.shp@data$mediresp
 nclr <- 8
 plotclr <- brewer.pal(nclr,"BuPu")
 class <- classIntervals(plotvar, nclr, style="quantile")
 colcode <- findColours(class, plotclr)

 plot(CAcounty.shp, xlim=c(-122.5, -117), ylim=c(32,42))
 plot(CAcounty.shp, col=colcode, add=T) 

XXXXX <- read.csv("XXXXXXXX.csv")
plotvar <- XXXXX$XXXXXX 

title(main=“XXXXXXXXXXXXXXXX",
sub=“Internal Data")
legend(-119, 42, legend=names(attr(colcode, "table")),
    fill=attr(colcode, "palette"), cex=0.6, bty="n")
 plotclr <- brewer.pal(nclr,"RdYlGn")
 colcode <- findColours(class, plotclr)
points(KPhosp$lon, KPhosp$lat, pch=16, col=colcode, cex=1)

【问题讨论】:

  • names(attr(colcode,'table')) 在两种情况下都返回相同的文本字符串不是真正的问题吗?
  • 大部分代码与问题无关。您不需要地图的东西来显示问题,只需生成 plotvar 和 plotclr 并给我们一些我们可以剪切和粘贴的东西。
  • 我无法获得图例来为我提供 any 类别的缺失数据。 耸耸肩

标签: r maps legend


【解决方案1】:

这对我来说是这样的,但你的假设是错误的:

plotvar=c(rep(NA,20),rep(0,20),1:10)
nclr <- 8
plotclr <- brewer.pal(nclr,"BuPu")
class <- classIntervals(plotvar, nclr, style="quantile")
colcode <- findColours(class, plotclr)

plot(1:10)

legend(5,5, legend=names(attr(colcode, "table")),
    fill=attr(colcode, "palette"), cex=0.6, bty="n")

生成具有大量 [0,0) 值的图例,这些值实际上都是零(不是缺失值 - 通过从向量中删除 NA 进行检查,没有任何变化)。

这是因为我有 8 个分位数中断,但是太多的零填充了不止一个分位数。

如果这是您的问题,那么您需要考虑另一种将值映射到颜色的方法,这与缺失值无关!

这里有一些类似的代码,展示了如何向图例添加一个额外的项目,以指示颜色为 NA 的项目会发生什么:

set.seed(310366)
x=1:30
y=30*runif(30)
plotvar=sample(5+10*c(rep(NA,20),runif(10)))
nclr <- 8
plotclr <- brewer.pal(nclr,"Spectral")
class <- classIntervals(plotvar, nclr, style="quantile")
colcode <- findColours(class, plotclr)

plot(x,y,col="black",pch=21,bg=colcode)

legend(5,10, legend=c("Missing",names(attr(colcode, "table"))),
    fill=c("white",attr(colcode, "palette")), cex=0.6, bty="n")

我认为您必须手动执行此操作。问题不大。

【讨论】:

  • 谢谢,减少级别数改进了图表,但在 plot 变量的 shapefile 的 .dbf 部分中有空白的县仍被归类为零。
  • 具有 NA 的区域的 colcode 也是 NA,因此该区域不会被填充。当我尝试时,这些区域看起来像白色区域。它没有被“归类为零”,只是没有被填充,这对于丢失数据似乎是合理的。如果您可以调整您的问题,以便我们可以剪切 n 粘贴并得到与您相同的问题,那么我们可以继续前进。目前它只是“对我有用”(这就是你被打分的原因!)。
  • 为了清楚起见,我说 LEGEND 将缺失归类为零。该地图以白色打印缺少数据的县,这是完美的。然而,图例显示:WHITE-- [0,0); LIGHT BLUE -- [0,0) BLUE -- [0, 0.1) 等。我希望 WHITE -- N/A 或只是空白。
  • 不是。您仍然有两个类别为零,并且您的调色板的第一个类别为白色,这恰好是您的 NA 值多边形显示为的背景颜色。我敢打赌,如果你在所有值上加 5,你会得到两个区间为 [5,5)。我认为您需要在图例中添加一些内容以显示 NA 值...
最近更新 更多