散点图最小点的大小不成比例

5

我正在使用点大小来可视化一个变量。 我的问题是第一个(最小的)点大小(在这种情况下为“70”)比其余的明显(而非成比例)要小。 (请参见CP的图例)

Notice that the point size for "70" is very small

这是我正在使用的代码:

ggplot(data=testdata, aes(x=variable, y=value, group=ID, size=CP)) + geom_point()

在这份数据上:
   ID  CP variable value
1  C1  70        A    76
2  C2  95        A    20
3  C3 100        A    30
4  C4  NA        A    17
5  C1  70        B    36
6  C2  95        B    10
7  C3 100        B    51
8  C4  NA        B    41
9  C1  70        C    89
10 C2  95        C     1
11 C3 100        C    94
12 C4  NA        C     6
13 C1  70        D   100
14 C2  95        D    98
15 C3 100        D    16
16 C4  NA        D    33

现在,当我尝试调整点大小时,R无法处理:
> testplot = ggplot(data=testdata, aes(x=variable, y=value, group=ID, size=CP)) + geom_point()
> testplot = testplot + scale_size_discrete(range=c(3,5))
Warning message:
Using size for a discrete variable is not advised. 
> testplot
Error: Continuous value supplied to discrete scale

没有生成任何情节。对于这个也是一样的:

> testplot = ggplot(data=testdata, aes(x=variable, y=value, group=ID, size=CP)) + geom_point()
> testplot = testplot + scale_size_continuous(to=c(3,5))
Error in scale_size_continuous(to = c(3, 5)) : 
  unused argument (to = c(3, 5))
> testplot
Error: Continuous value supplied to discrete scale

一个解决方法是:scale_size(limits = c(1,max(testdata $ CP),breaks = unique(testdata $ CP)),但我不确定为什么默认设置不起作用。您不能为连续的“size”变量使用“discrete”大小比例尺,这就是为什么您的“scale_size_discrete”无法修复的原因。 - Gregor Thomas
1
你只是缺少 range 参数而不是 to 参数 - scale_size_continuous(range = c(3, 5)) - aosmith
感谢 @aosmith,确实 scale_size_continuous(range = c(3, 5)) 能够正常工作。我仍然想知道为什么除非我指定一个在图例步骤中相等的范围,否则第一个点的大小会很小。数据的分类特性是否搞乱了它?我是否需要针对每个图形手动调整范围? - Alpi Murányi
您的数据不是分类数据(无论如何都不属于其“类”)。 - Gregor Thomas
同意 @Gregor 的看法,数据不是分类数据。然而,当我将 CP 中的数据更改为 77 95 84 NA(依此类推),图例变得正常了——但是绘图仍然有一些点,它们与图例不再匹配!链接 - Alpi Murányi
1个回答

0
原来这是“人类感知的产物”,这意味着点的缩放是正确的,但可能会给人不正确的印象。请参阅开发人员的讨论这里
对我而言,最好的解决方法是使用scale_radius(range=c(1, 6)) 更多关于感知和缩放关系的阅读:史蒂文斯幂律

在这个例子中显然并不是真的 --- 在问题中显示为70的点明显比显示为100的点的大小要小于70%。这不是人类感知的产物。 - Ben
@Ben,它要小得多,背后有原因。看看讨论,特别是这张图。非默认缩放选项,如scale_radius()提供了替代方案。 - Alpi Murányi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接