我在data.table中有数据结构如下:
> head(dt)
V1 V2
1: 11 702.3312
2: 12 17207.1137
3: 4 10886.1332
4: 33 5618.6494
5: 11 3511.6559
6: 15 8779.1397
我正在尝试创建V1
vs V2
的散点图,这样如果两个点重叠,那么它会产生更大的点。
使用stat_sum()
的ggplot很简单。我的代码如下:
plt<-ggplot(data=dt, aes(x=V2, y=V1, group=V1))+theme_bw()
plt<-plt+stat_sum(aes(size=..n..), alpha=0.4)
plt
请注意,即使添加某个位置的点以生成整数,图例也会显示1.25,1.5,1.75的条目。
如何修改代码以仅为图中实际存在的整数生成图例条目(在本例中为1和2)?
注1:我使用aes(size=..n..)
,根据documentation,它使用的是sum而不是比例
注2:我的实际数据集要大得多,所以我不想手动更改图例条目
复制数据
> dput(dt)
structure(list(V1 = c(28, 38, 26, 13, 32, 9, 4, 23, 46, 4, 26,
5, 2, 3, 3, 25, 8, 23, 23, 2, 30, 8, 7, 33, 1, 1, 13, 27, 44,
40, 19, 12, 16, 22, 30, 18, 5, 22, 10, 11, 2, 15, 25, 14, 7,
1, 4, 16, 6, 5), V2 = c(3511.65586098655, 8427.97406636771, 17558.2793049327,
2809.32468878923, 10183.801996861, 4916.31820538118, 702.331172197322,
2106.99351659193, 21069.9351659193, 3862.82144708518, 1053.49675829597,
1053.49675829596, 2458.15910269058, 4916.31820538118, 5267.48379147983,
3160.49027488788, 1053.49675829595, 2106.99351659193, 7023.3117219731,
1404.66234439462, 702.3311721973, 3862.8214470852, 3160.49027488788,
16855.9481327354, 702.331172197302, 2809.32468878925, 2458.15910269058,
16504.7825466368, 16855.9481327354, 9481.47082466369, 3511.65586098653,
4213.98703318385, 5267.48379147981, 5267.48379147983, 5618.64937757847,
16855.9481327354, 4916.31820538117, 16504.7825466368, 2106.99351659193,
4916.31820538116, 3160.4902748879, 3511.65586098655, 3160.49027488788,
2809.32468878925, 4916.31820538116, 5618.64937757848, 702.331172197322,
3160.4902748879, 8427.97406636773, 1755.82793049328)), .Names = c("V1",
"V2"), class = c("data.table", "data.frame"), row.names = c(NA,
-50L), .internal.selfref = <pointer: 0x00000000028b0788>)
进一步说明
与question here不同,其目的是使用图例仅突出显示图表中特定类型的点,在我的问题中,我想阻止stat_sum()
在图例中生成条目不对应于图表的任何元素。正如我在我的问题中所强调的那样,由于添加了每个位置(即重叠点)的点数,因此图表上的点不可能表示来自该表的1.25 / 1.5 / 1.75个条目。图上的每个点只能表示1:只有一个点(x,y)没有重叠,或者整数大于1:表示在该特定(x,y)位置重叠的点数。