如何在ggplot中反转点的大小?

12
请帮我解决这个问题。我需要将正值表示为小点,负值表示为大点。如果在大小前加上减号,则点的大小是正确的,但图例会改变:
df=data.frame(x=rnorm(20),y=runif(20),z=rnorm(20))
ggplot(df,aes(x=x,y=y))+geom_point(aes(size=-z))

所以那并不适合。


尝试使用 last_plot() + scale_size(range = c(5,1)) + guides(size = guide_legend(reverse=TRUE)) - baptiste
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))

这里输入图片描述


1
https://dev59.com/-2Yq5IYBdhLWcg3wpyNE#61920721 是一个更好的解决方案,它不需要你去调整美学、图例标题、断点和标签。 - jan-glx

8

虽然有点晚了,但更简单的方法是在 scale_size 中添加 trans='reverse'

例如:

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')

example plot with reversed size scale


3

虽然这个问题很老 - 并且已经有了一个被接受的答案 - 但是baptiste的评论建议使用last_plot() + scale_size(range = c(5,1)) + guides(size = guide_legend(reverse=TRUE))非常优雅和简单。对于我的数据,我需要产生与OP相同的结果,这个方法可以直接使用,无需进行任何修改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接