如何在ggplot中反转点大小?

时间:2013-01-13 19:22:28

标签: r ggplot2

请帮助我这一点。我需要将正值表示为小点,将负值表示为大点。如果我在尺寸之前减去胶带,那么点尺寸是正确的,但图例正在改变:

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

所以不适合。

3 个答案:

答案 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))

enter image description here

答案 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相同结果的数据,需要零修改。