【发布时间】: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