请帮助我这一点。我需要将正值表示为小点,将负值表示为大点。如果我在尺寸之前减去胶带,那么点尺寸是正确的,但图例正在改变:
df=data.frame(x=rnorm(20),y=runif(20),z=rnorm(20))
ggplot(df,aes(x=x,y=y))+geom_point(aes(size=-z))
所以不适合。
答案 0 :(得分:10)
一种解决方案是使用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))
答案 1 :(得分:1)
来晚了,但是更简单的方法是将trans='reverse'
添加到scale_size。
示例:
df=data.frame(x=rnorm(20),y=runif(20),z=rnorm(20))
ggplot(df,aes(x=x,y=y))+
geom_point(aes(size=z)) +
scale_size(trans = 'reverse')
答案 2 :(得分:0)
尽管这个问题非常古老-并已得到公认的答案-来自baptiste的建议使用last_plot() + scale_size(range = c(5,1)) + guides(size = guide_legend(reverse=TRUE))
的注释非常简洁而有效。对于需要产生与OP相同结果的数据,需要零修改。