11

请帮我解决这个问题。我需要将正值表示为小点,将负值表示为大点。如果我在大小之前使用减号,则点大小是正确的,但图例正在改变:

df=data.frame(x=rnorm(20),y=runif(20),z=rnorm(20))
ggplot(df,aes(x=x,y=y))+geom_point(aes(size=-z))

所以不适合。

4

3 回答 3

14

一种解决方案是使用scale_size()并设置您自己的breaks,然后labels在相反的方向。更改了z值的范围以获得更好的表示。

df=data.frame(x=rnorm(20),y=runif(20),z=(-13:6))
ggplot(df,aes(x=x,y=y))+geom_point(aes(size=-z))+
  scale_size("New legend",breaks=c(-10,-5,0,5,10),labels=c(10,5,0,-5,-10))

在此处输入图像描述

于 2013-01-13T19:38:01.167 回答
6

有点晚了,但更简单的方法就是添加trans='reverse'到 scale_size。

例子:

df=data.frame(x=rnorm(20),y=runif(20),z=z=(-13:6))
ggplot(df,aes(x=x,y=y))+
geom_point(aes(size=z)) +
scale_size(trans = 'reverse')

具有反向大小比例的示例图

于 2020-05-20T18:52:02.657 回答
2

虽然这个问题非常古老 - 并且有一个公认的答案 - 来自 baptiste 的评论建议使用last_plot() + scale_size(range = c(5,1)) + guides(size = guide_legend(reverse=TRUE))非常优雅和简单。对于我需要产生与 OP 相同结果的数据,这需要零修改。

于 2020-04-22T02:08:30.800 回答