Rの凡例のアイテム間の距離を減らしますか?


9

パッケージchoropleth()を使用してRで正しいマップを作成しようとしていGISToolsます。choro.legend()凡例を表示するために使用します。ただし、正しい凡例の配置を作成できません。またfmtchoro.legend()関数でのパラメーターの役割がわかりません。fmt凡例の色と説明の間隔を狭めることができるようです。

ここに画像の説明を入力してください

私が見つかりました。choro.legendヘルプページ状態はということfmtである「choroplethクラスの制限上記に記載された値のためのCスタイルのフォーマットを」

だから、これは凡例アイテム自体の距離ではなく、私のクラス値で動作するはずですか?

またはこれの人間が理解できる意味は何ですか?

choro.legend()のアイテム間の距離を縮めるにはどうすればよいですか?

choropleth(my.shp, nc.lI[,1], shading = income.shade)
choro.legend(-12919698, 5314317,income.shade,title='My title',cex=0.8, bty = "n", fmt = "%0.1f")

私はこれについて少し掘り下げたり実験したりしました。私はこれをCスタイルの文字列フォーマットコマンドで見つけました:stuff.mit.edu/afs/sipb/project/r-project/lib/R/library/base/…。しかし、これは伝説のアイテム間の距離に影響を与えていないようです。あなたのコードでは凡例のタイトルは「私のタイトル」ですが、あなたの画像では凡例にタイトルがありません。ここに問題がありますか?疑わしいですが、調べてみる価値はあります。
2016

さらに詳しく調べてみると、「%20.1f」の値を使用すると、非常に広い凡例(ユーザーのような)が生成され、「%0.1f」の値を使用すると、凡例の項目が非常に近くなります。ただし、「%0.1f」の値を使用しており、アイテムの間隔が離れています。他に考えられる唯一のことは、値の前に空白スペースが埋め込まれる可能性があることですが、なぜこれがあるのか​​わかりません。
2016

回答:


3

fmt凡例アイテムの間隔とは関係ありません。詳細については、「Cスタイルの文字列フォーマットコマンドfmt使用する」を参照してください。次のコードスニペットをRコンソールに貼り付けるだけで、違いを確認できます(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()legend()内部的に呼び出します。凡例項目間の水平方向の間隔を狭めるにtext.widthは、legend()関数のパラメーターを変更する必要があります。残念ながらchoro.legendtext.width外部で設定するパラメーターを提供せず、内部で計算します。space_reductionパラメータをに追加しchoro.legend、元の関数を次のように少し変更しました。

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)
}

このスニペットをRスクリプトファイルに保存しますsource。再現可能なコードスニペットは次のようになります。

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)

space_reductionパラメータを徐々に減らしたり増やしたりして、目的の結果を達成します。

ここに画像の説明を入力してください


上記のとおり、choro.legend関数を使用しようとしましたが、space_reductionに設定した値に関係なく、次のエラーメッセージが表示されます。 res))、fill = sh $ cols、: 'text.width'は数値でなければなりません>> 0私の関数呼び出しは次のようになります:choro.legend(-85.80,45.3、tneffort.shades、title = 'Trapnet lifts per year' 、cex = 0.6、bty = "n"、fmt = "%0.0f"、space_reduction = 4000)誰でも問題の原因を特定できますか?
Darryl H
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.