5

我正在使用geom_pointwhere y = var1x = year和可视化面板数据集color = var2。问题是有很多重叠点,即使有水平抖动。

减小点大小或设置较低的 alpha 值是不可取的,因为两者都会减少第二个变量的视觉影响,该变量具有非常长的右偏斜。我希望 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"))

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

4

2 回答 2

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

所以我建议你先重新排序你的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
于 2012-08-04T02:36:49.543 回答
2

在 ggplot2 中,您可以使用order 美学来指定绘制点的顺序。最后绘制的将出现在顶部。要应用这一点,请创建一个变量来保存您希望绘制点的顺序;在您的情况下,您可能可以指定rank(var2).

对于可重现的示例,将最高的点df$price放在顶部:

df <- data.frame(diamonds)
df$orderrank <- rank(df$price,ties.method="first")

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

以下是问题中的示例与按价格指定绘图顺序的图表之间的输出差异:

无序和有序图的比较

(抖动使比较不太清楚,但仍然存在差异。)

于 2015-03-29T03:20:52.333 回答