R でラベル付きのバブル プロットを作成しようとしていますggplot2
。簡略化されたシナリオは次のとおりです。
4 つの変数を持つデータ フレームx
がy
ありz
ますlab
。
x
と で位置を決定し、y
でポイントのサイズを決定する散布図を作成したいと考えていz
ます。次に、ポイントの上にテキストを重ねることなく、ポイントの横(たとえば、ポイントの右側) にテキスト ラベルを配置します。
ポイントのサイズが変わらない場合はgeom_text
、スケーリング定数 ( などaes(x=x+1, y=y+1)
) を追加して、レイヤーの美しさを単純に変更することができます。ただし、この単純なケースでも、ポイントがプロットの出力次元に合わせてスケーリングされないため、テキストを正しく配置するのに問題があります。つまり、ポイントのサイズは 500x500 プロットと 1000x1000 プロットで一定のままです。出力されたプロットのサイズで拡大しません。
したがって、出力プロットのサイズ (寸法など) でラベルの位置をスケーリングするか、ggplot
何らかの方法でポイントの半径を取得してテキスト ラベルをシフトする必要があると思います。でこれを行う方法はありggplot2
ますか?
ここにいくつかのコードがあります:
# Stupid data
df <- data.frame(x=c(1,2,3),
y=c(1,2,3),
z=c(1,2,1),
lab=c("a","b","c"), stringsAsFactors=FALSE)
# Plot with bad label placement
ggplot(aes(x=x, y=y), data=df) +
geom_point(aes(size=z)) +
geom_text(aes(label=lab),
colour="red") +
scale_size_continuous(range=c(5, 50), guide="none")
編集:私は言及する必要があります、私はgeom_textの中で試しhjust
てみvjust
ましたが、それは望ましい効果を生み出しません.
# Trying hjust and vjust, but it doesn't look nice
ggplot(aes(x=x, y=y), data=df) +
geom_point(aes(size=z)) +
geom_text(aes(label=lab), hjust=0, vjust=0.5,
colour="red") +
scale_size_continuous(range=c(5, 50), guide="none")
編集: Henrik と shujaa のおかげで、今のところ機能するものを手に入れることができました。誰かがより一般的な解決策を共有する場合に備えて、質問を開いたままにします。
私がこれを使用していることの単なる宣伝文句: 私は地図をプロットしており、観察された降水量に比例してサイズが決められたポイントで特定のステーションでの降水量を示しています. 各ポイントの横に駅のラベルを美的に美しい方法で追加したかったのです。さまざまな地域でこれらのプロットをさらに作成しますが、出力プロットはプロットごとに異なる解像度またはスケール (たとえば、投影法が異なるため) になる可能性があるため、一般的な解決策が必要です。position_jitter
週末に時間があれば、バティストが提案したように、カスタムを作成してみるかもしれません.