我已经在ggplot2中创建了一个情节,然后在"顶部"在该情节中,我使用geom_rect()
来显示(红色)具有z
值的最低10%的数据点。我仍然希望使用scale_fill_gradientn
填充图例/比例尺,但我想在填充的最小值(即垂直比例的底部)处插入红色。我如何使用scale_fill_gradientn
并执行此操作?或者,如何使用其他方法获得所需的结果?
# The example code here produces an plot for illustrative purposes only.
# create data frame, from ggplot2 documentation
df <- expand.grid(x = 0:5, y = 0:5)
df$z <- runif(nrow(df))
# select min. 10%
df.1 <- df[df$z <= quantile(df$z, 0.1),]
#plot
ggplot(df, aes(x, y, fill = z)) + geom_raster() +
scale_fill_gradientn(colours=topo.colors(7),na.value = "transparent") +
geom_rect(data=df.1, size=1, fill="red", colour=NA , aes(xmin=x-.5, xmax=x+.5, ymin=y-.5, ymax=y+.5))
答案 0 :(得分:3)
一种解决方案是将"red"
作为scale_fill_gradientn()
中的一种颜色提供。使用红色两次以确保在0到0.1的范围内,所有值都得到红色&#34;然后使用seq()
,范围从0.1001到1的所有其他值均匀分布。在这种情况下,您不需要第二个数据帧。
set.seed(123)
df <- expand.grid(x = 0:5, y = 0:5)
df$z <- runif(nrow(df))
ggplot(df, aes(x, y, fill = z)) + geom_raster() +
scale_fill_gradientn(colours=c("red","red",topo.colors(6)),
values=c(0,0.1,seq(0.1001,1,length.out=7)),na.value = "transparent")