次の成果を達成したいと考えています。
- 最大のバブルの直径が 1 になるように、バブルのサイズを再スケーリングします (x 軸と y 軸のスケールがより圧縮されている方)。
- 最小のバブルの直径が 1 mm になるように、バブルのサイズを変更します。
- 最初と最後の点がゼロ以外の最小周波数と最大周波数を持つ凡例を用意します。
私ができる最善の方法は次のとおりですが、ハードコーディングではなく maxSize の値が計算される、より一般的なソリューションが必要です。従来の R プロットでそれを行っていた場合、par("pin") を使用してプロット領域のサイズを計算し、逆方向に作業しますが、ggplot2 でこの情報にアクセスする方法がわかりません。助言がありますか?
library(ggplot2)
agData = data.frame(
class=rep(1:7,3),
drv = rep(1:3,rep(7,3)),
freq = as.numeric(xtabs(~class+drv,data = mpg))
)
agData = agData[agData$freq != 0,]
rng = range(agData$freq)
mn = rng[1]
mx = rng[2]
minimumArea = mx - mn
maxSize = 20
minSize = max(1,maxSize * sqrt(mn/mx))
qplot(class,drv,data = agData, size = freq) + theme_bw() +
scale_area(range = c(minSize,maxSize),
breaks = seq(mn,mx,minimumArea/4), limits = rng)
これまでの様子は次のとおりです。