geom_point:将具有最高值的重叠点放在其他点之上

met*_*oia 5 visualization r ggplot2

我用可视化的面板数据集geom_point,其中y = var1,x = yearcolor = var2.问题是有许多重叠点,即使是水平抖动也是如此.

减小点大小或设置低α值是不合需要的,因为两者都降低了第二变量的视觉影响,第二变量具有非常长的右偏斜.我希望ggplot将具有最高值的点var2放在所有其他重叠点之上.

可重复的例子:

df <- data.frame(diamonds)

ggplot(data = df,aes(x=factor(cut),y=carat,colour=price)) + 
  geom_point(position=position_jitter(width=.4))+
  scale_colour_gradientn(colours=c("grey20","orange","orange3"))
Run Code Online (Sandbox Code Playgroud)

如何将具有最高值的点df$price放在重叠的点堆栈顶部?

bap*_*ste 6

看起来网格按照数据的顺序绘制,

library(grid)

d <- data.frame(x=c(0.5,0.52),y=c(0.6,0.6), fill=c("blue","red"),
                stringsAsFactors=FALSE)

grid.newpage()
with(d,grid.points(x,y,def='npc', pch=21,gp=gpar(cex=5, fill=fill)))
with(d[c(2,1),], grid.points(x,y-0.2,def='npc', pch=21,
                             gp=gpar(cex=5, fill=fill)))
Run Code Online (Sandbox Code Playgroud)

所以我建议你先重新排序你的data.frame,并祈祷ggplot2不会乱用它:)

library(ggplot2)
library(plyr)
df <- diamonds[order(diamonds$price, decreasing=TRUE), ]
# alternative with plyr
df <- arrange(diamonds, desc(price))
last_plot() %+% df
Run Code Online (Sandbox Code Playgroud)