我在ggplot2
创建了一个使用scale_fill_gradientn
的情节。我想在缩放图例的最小值和最大值处添加文字。例如,在图例最小显示"最小"并在图例最大显示"最大"。有些帖子使用离散填充并添加带有数字而不是文本的标签(例如here),但我不确定如何将labels
功能与scale_fill_gradientn
一起使用,仅在最小时插入文字最多目前我很容易出错:
Error in scale_labels.continuous(scale, breaks) :
Breaks and labels are different lengths
这种类型的缩放/填充是否可以在ggplot2中使用此文本标签?
# 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))
#plot
ggplot(df, aes(x, y, fill = z)) + geom_raster() +
scale_fill_gradientn(colours=topo.colors(7),na.value = "transparent")
答案 0 :(得分:33)
对于scale_fill_gradientn()
,您应该提供两个参数:breaks=
和labels=
,长度相同。使用参数limits=
,您可以将颜色条扩展为所需的最小值和最大值。
ggplot(df, aes(x, y, fill = z)) + geom_raster() +
scale_fill_gradientn(colours=topo.colors(7),na.value = "transparent",
breaks=c(0,0.5,1),labels=c("Minimum",0.5,"Maximum"),
limits=c(0,1))
答案 1 :(得分:1)
User Didzis Elfert's answer 在我看来稍微缺乏“自动化”(但它当然指向问题的核心+1 :)。 这是一个以编程方式定义数据的最小值和最大值的选项。
优点:
library(ggplot2)
foo <- expand.grid(x = 0:5, y = 0:5)
foo$z <- runif(nrow(foo))
myfuns <- list(Minimum = min, Mean = mean, Maximum = max)
ls_val <- unlist(lapply(myfuns, function(f) f(foo$z)))
# you only need to set the breaks argument!
ggplot(foo, aes(x, y, fill = z)) +
geom_raster() +
scale_fill_gradientn(
colours = topo.colors(7),
breaks = ls_val
)
# You can obviously also replace the middle value with sth else
ls_val[2] <- 0.5
names(ls_val)[2] <- 0.5
ggplot(foo, aes(x, y, fill = z)) +
geom_raster() +
scale_fill_gradientn(
colours = topo.colors(7),
breaks = ls_val
)