我想实现以下结果:
- 重新调整气泡的大小,使最大的气泡的直径为 1(以 x 和 y 轴的压缩比例更大者为准)。
- 重新调整气泡的大小,使最小的气泡直径为 1 毫米
- 有一个图例,第一个和最后一个点是最小非零频率和最大频率。
我能做的最好的事情如下,但我需要一个更通用的解决方案,其中计算 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)
这是到目前为止的样子: