【发布时间】:2015-08-05 22:58:22
【问题描述】:
我想用ggplot2 创建一个气球图,其中点的大小是给定坐标处数据的频率。
给定data.frame d:
d = structure(list(value.x = structure(c(2L, 2L, 3L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 2L, 2L), .Label = c("Not at all Knowledgeable", "Somewhat Knowledgeable", "Very Knowledgeable"), class = c("ordered", "factor")), value.y = structure(c(5L, 5L, 3L, 5L, 5L, 5L, 5L, 5L, 4L, 4L, 5L, 4L, 4L, 4L, 5L, 4L, 5L, 5L, 4L, 4L), .Label = c("Much less knowledgeable", "Less knowledgeable", "Same as before workshop", "More knowledgeable", "Much more knowledgeable"), class = c("ordered", "factor"))), .Names = c("value.x", "value.y"), row.names = c(NA, 20L), class = "data.frame")
我想做这样的事情:
ggplot(d,aes(value.x,value.y,size=..count..))+geom_point()
数据点与数据出现的次数成正比,但我无法弄清楚如何正确设置我想要的点的大小。
重要的是,我想避免在 d 中创建一个新列,仅用于其他数据集(例如 http://www.r-bloggers.com/balloon-plot-using-ggplot2/)的数据计数。这看起来很乱,如果可以的话,我想利用ggplot2 的力量。
【问题讨论】:
-
见
stat_sum()... -
关于你的最后一句话:虽然
ggplot中确实有一些不错的辅助函数,但在将数据提供给ggplot之前聚合数据通常更容易、更透明。 -
您确实意识到 ggplot 实际上是在复制您的数据并添加一个计算列,对吧?为什么不自己做(即使是在临时数据框中),以便您拥有更多控制权?怎么这么“乱”?