我正在使用分类数据,我正在尝试绘制一个散点图,其中点的大小应代表该点位置的频率。
我首先尝试使用抖动,但我对此解决方案不满意。
我以为我可以创建一个Frequencies列但是没有设法为它创建代码。
qplot(X, Y, data=datatable, geom=c("point"))
有人有想法吗?
THX
答案 0 :(得分:9)
这是对你所追求的东西的猜测。在下面的df
数据框中,x
和y
是您的分类变量。有多种方法可以获得频率计数。在这里,使用ddply()
包中的plyr
函数。其次是情节。在致电ggplot
时:size
美学确保点数大小代表频率;并且scale_size_discrete()
函数控制图上点的大小。
# Some toy data
df <- structure(list(x = structure(c(1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L,
5L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 1L, 2L, 1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 1L, 2L, 3L,
4L, 5L, 1L, 2L, 3L, 4L, 5L), .Label = c("1", "2", "3", "4", "5"
), class = "factor"), y = structure(c(1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L,
5L, 5L, 5L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L,
4L, 4L, 4L, 1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 1L, 1L, 2L, 2L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L,
4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L), .Label = c("1", "2", "3",
"4", "5"), class = "factor")), .Names = c("x", "y"), row.names = c(NA,
79L), class = "data.frame")
# Required packages
library(plyr)
library(ggplot2)
# Get the frequency counts
dfc <- ddply(df, c("x", "y"), "nrow", .drop = FALSE)
#dfc
# The plot
ggplot(data = dfc, aes(x = x, y = y, size = factor(nrow))) +
geom_point() +
scale_size_discrete(range = c(1, 10))
使用df
数据框的相同图表 - 未聚合数据。
ggplot(data = df, aes(x = x, y = y)) +
stat_sum(aes(size = factor(..n..)), geom = "point") +
scale_size_discrete(range = c(1, 10))
答案 1 :(得分:-1)
尝试spatstat包中的ppp类,带有标记的对象的默认绘图就是你所要求的。