ggplot stat_sum()生成不必要的图例条目

时间:2016-10-25 13:15:01

标签: r ggplot2

我在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

我得到的情节是: enter image description here

请注意,即使添加某个位置的点以生成整数,图例也会显示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)位置重叠的点数。

1 个答案:

答案 0 :(得分:0)

问题在于ggplot2假设size属性是一个连续变量。将其强制转换为因子将解决问题。

因为在你的情况下,size变量总是为整数,你可以在as.factor函数size内的aes参数中使用stat_sum,你将获得期望的结果。

以下代码

plt <- ggplot(data=dt, aes(x=V2, y=V1, group=V1))+theme_bw()
plt <- plt + stat_sum(aes(size=as.factor(..n..)), alpha=0.4)  
plt <- plt + labs(size='n')
plt

给了我这个 The final output