1. ホーム
  2. r

[解決済み] Rにおける点ラベルのインテリジェントな配置

2022-12-25 01:16:07

質問

  1. R プロットでインテリジェントなラベル配置を実装する R ライブラリ/関数はありますか? 多くのラベルが互いに、あるいは他の点 (あるいはプロット内の他のオブジェクト) に重なっています。

  2. もしそうでなければ、特定の問題のある点のラベル配置でアルゴリズムを快適に手助けする方法はありませんか? 最も快適で効率的なソリューションが欲しいです。

あなたは、他の可能性を遊びながら試すことができ、私の 再現可能な例 で遊んでみて、私より良い結果を得られるかどうか見てみましょう。

# data
x = c(0.8846, 1.1554, 0.9317, 0.9703, 0.9053, 0.9454, 1.0146, 0.9012, 
0.9055, 1.3307)
y = c(0.9828, 1.0329, 0.931, 1.3794, 0.9273, 0.9605, 1.0259, 0.9542, 
0.9717, 0.9357)
ShortSci = c("MotAlb", "PruMod", "EriRub", "LusMeg", "PhoOch", "PhoPho", 
"SaxRub", "TurMer", "TurPil", "TurPhi")

# basic plot
plot(x, y, asp=1)
abline(h = 1, col = "green")
abline(v = 1, col = "green")

ラベリングのために、私はこれらの可能性を試しましたが、どれも本当に良いものではありませんでした。

  1. これはひどい

    text(x, y, labels = ShortSci, cex= 0.7, offset = 10)

  2. これは、すべての点に対してラベルを配置するのではなく、外れ値に対してのみラベルを配置したい場合に有効です。 しかし、それでも、ラベルはしばしば間違って配置されます。

    identify(x, y, labels = ShortSci, cex = 0.7)

  3. これは有望に見えましたが、ラベルがポイントに近すぎるという問題があります。 私はスペースでそれらをパッドしなければなりませんでしたが、これはあまり役に立ちません。

    require(maptools) pointLabel(x, y, labels = paste(" ", ShortSci, " ", sep=""), cex=0.7)

  4. require(plotrix) thigmophobe.labels(x, y, labels = ShortSci, cex=0.7, offset=0.5)

require(calibrate)
textxy(x, y, labs=ShortSci, cx=0.7)

ありがとうございました。

EDITです。 todo:試してみてください。 実験曲線 {Hmisc} .

どのように解決するのですか?

私はいくつかの解決策を見つけました! 残念ながら、それは究極の、そして理想的なものではありませんが、それは今私のために最もよく機能するものです。半分アルゴリズムで半分手動なので、ジョランがスケッチした純粋な手動ソリューションに比べて時間を節約することができます。

私は非常に見落としていました。 の重要な部分を見落としていました。 ?identify ヘルプ!

ラベルを配置するために使用されるアルゴリズムは、textで使用されるものと同じです。 posが指定されている場合と同じです。 ポインタの位置が識別されたポイントに相対して、識別のposを決定するという点です。

ですから、もしあなたが identify() という解決策をとると、質問で書いたように を使えば、ラベルの位置を変えるには、その点を直接クリックするのではなく その点の隣を希望する方向に相対的にクリックします!!! 素晴らしい機能です。

欠点は、ポジションが4つ(上、左、下、右)しかないことですが、私は残りの4つ(左上、右上、左下、右下)の方がありがたいかな...と思っています。なので、気にならないポイントにはこれを使い、それ以外のポイントはjoranさんの提案通り、パワーポイントに直接ラベルを貼っています :-)

追伸: directlabels lattice/ggplot ソリューションはまだ試していません。