fmt
no tiene nada que ver con el espaciado de los elementos de la leyenda. Para una descripción detallada de fmt
Consulte Uso de comandos de formato de cadenas de estilo C . Sólo tiene que pegar el siguiente fragmento de código en su R
consola para ver las diferencias (pi ~ 3,14):
sprintf("%f", pi)
sprintf("%.3f", pi)
sprintf("%1.0f", pi)
sprintf("%5.1f", pi)
sprintf("%05.1f", pi)
sprintf("%+f", pi)
sprintf("% f", pi)
sprintf("%-10f", pi) # left justified
sprintf("%e", pi)
sprintf("%E", pi)
sprintf("%g", pi)
sprintf("%g", 1e6 * pi) # -> exponential
sprintf("%.9g", 1e6 * pi) # -> "fixed"
sprintf("%G", 1e-6 * pi)
choro.legend()
llama a legend()
internamente. Para reducir el espacio horizontal entre los elementos de la leyenda, debe cambiar la opción text.width
del legend()
función. Por desgracia, choro.legend
no proporciona un parámetro para establecer text.width
externamente en lugar de calcularlo internamente. He añadido un space_reduction
al parámetro choro.legend
y modificó ligeramente la función original de la siguiente manera
choro.legend <- function (px, py, sh, under = "under", over = "over", between = "to",
fmt = "%g", cex = 1, space_reduction = 0, ...)
{
x = sh$breaks
lx = length(x)
if (lx < 3)
stop("break vector too short")
res = character(lx + 1)
res[1] = paste(under, sprintf(fmt, x[1]))
for (i in 1:(lx - 1)) res[i + 1] <- paste(sprintf(fmt, x[i]),
between, sprintf(fmt, x[i + 1]))
res[lx + 1] <- paste(over, sprintf(fmt, x[lx]))
maxwidth <- max(strwidth(res)) - space_reduction
temp <- legend(x = px, y = py, legend = rep(" ", length(res)),
fill = sh$cols, text.width = maxwidth, cex = cex, ...)
text(temp$rect$left + temp$rect$w, temp$text$y, res, pos = 2,
cex = cex)
}
Guarde este fragmento en un archivo de script R y source
eso. Un fragmento de código reproducible sería como el siguiente:
library(GISTools)
data(newhaven)
blocks
val <- blocks@data$POP1990
shade <- auto.shading(val)
choropleth(blocks, v= val, shade)
choro.legend(514000, 175000,shade,title='My Legend',cex=.8, bty = "n", fmt = "%0.0f",
space_reduction=4000)
Disminuir/aumentar gradualmente el space_reduction
para lograr el resultado deseado.
0 votos
He investigado/experimentado un poco sobre esto. Encontré esto en comandos de formato de cadena de estilo C: stuff.mit.edu/afs/sipb/project/r-project/lib/R/library/base/ . Pero esto no parece tener ninguna relación con la distancia entre los elementos de la leyenda. Me he dado cuenta de que en su código el título de la leyenda es "Mi título", pero en su imagen no hay título en la leyenda. ¿Podría haber algún problema? Lo dudo, pero vale la pena investigarlo.
0 votos
En una inspección más detallada, el uso de un valor de "%20.1f" produce una leyenda realmente ancha (como la tuya) y un valor de "%0.1f" produce una con los elementos de la leyenda mucho más juntos. Pero si usas un valor de "%0.1f" tus elementos están muy separados. La única otra cosa que se me ocurre es un posible espacio en blanco rellenando la parte delantera de tus valores, pero no sé por qué tendrías esto.