【问题标题】:geom_point smallest point size is not in proportiongeom_point 最小点大小不成比例
【发布时间】:2016-05-23 19:02:53
【问题描述】:

我正在使用点大小来可视化一个变量。 我的问题是第一个(最小)点大小(在本例中为“70”)明显(不成比例地)小于其余点。 (见CP图例)

这是我正在使用的代码:

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)),但我不确定为什么默认设置不起作用。您不能将discrete 大小比例用于连续的size 变量,这就是您的scale_size_discrete 无法修复的原因。
  • 您只是缺少 range 参数而不是 to 参数 - scale_size_continuous(range = c(3, 5))
  • 感谢@aosmith 确实scale_size_continuous(range = c(3, 5)) 按预期工作。我仍然想知道为什么第一个点的大小如此之小,除非我指定一个等于图例中的步骤的范围。数据的分类性质是否搞砸了?我是否必须为每个图表手动调整范围?
  • 你的数据不是分类的(反正不是class)。
  • 同意@Gregor数据不是分类的,但是,当我将CP中的数据更改为77 95 84 NA(等等)时,图例变得正常——而且情节仍然很少,与传说不符! link

标签: r ggplot2


【解决方案1】:

原来它是“人类感知的人工制品”,这意味着点的缩放是正确的,但人们可能会有这样的印象,它不是。见开发者讨论here

对我来说最好的解决方法是使用scale_radius(range=c(1, 6))

知觉与尺度关系的延伸阅读:Stevens' power law

【讨论】:

  • 在这个例子中显然不是这样 --- 问题中显示为 70 的点显然 小于显示为 100 的点大小的 70% . 这不是人类感知的产物。
  • @Ben,它要小得多,这背后是有原因的。查看discussion,尤其是this graph。像scale_radius() 这样的非默认缩放选项提供了替代方案。
猜你喜欢
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-07
  • 1970-01-01
相关资源
最近更新 更多