在ggplot图例中添加自定义数字

3
我正在绘制一个 geom_tile 图,其中每个点都有特定的 p-value
这个图用 p-value 的范围画得很好,并且在图例上标出了范围。
我想要添加到这个图例中的是具有该 p-value 的数据点数量。
例如:
图例类似于(每个值的颜色不同):
0.05
0.04
0.03
0.02
0.01

我希望得到的是像这样的东西:
0.05 58
0.04 34
0.03 85
0.02 54
0.01 10

我应该如何把这个添加到ggplot2图例中?

我尝试使用geom_text并将文本位置更改为图例,但未成功。

更新:

pl <- ggplot(df.new) + geom_tile(aes(fill=z, x, y)) + 
      scale_fill_gradient(low="yellow", high="red", name="Legend1") + 
      stat_contour(breaks=c(0.001, 0.01, 0.05), aes(x=x, y=y, z=npvalue, colour=..level..)) +
      scale_colour_gradient2(low="black", mid="black", high="green", labels=paste(levels(c(0.001, 0.01, 0.05))))

我有一个图表,从z变量中正确绘制了geom_tile,然后基于p值绘制了stat_contour。我想编辑基于p-valuestat_contour颜色标签,就像我最初提出的问题一样,但是我遇到了以下错误:

Error in scale_labels.continuous(scale, breaks) : 
  Breaks and labels are different lengths

我的绘图出了什么问题?请问是哪里出了问题?

2
如果您提供一个最小化、可重现的示例并展示您尝试过的代码,人们通常会更乐意帮助您。谢谢。 - Henrik
1个回答

10
你可以指定填充颜色的图例标签。
一个示例数据集:
set.seed(1)
dat <- data.frame(x = rep(1:5), y = rep(1:10), 
                  z = factor(sample(seq(0.01, 0.05, 0.01), 100, TRUE)))

函数table会计算dat$z的不同值:

table(dat$z)

# 0.01 0.02 0.03 0.04 0.05 
#   13   25   19   26   17

情节:

library(ggplot2)
ggplot(dat) +
  geom_tile(aes(x = x, y = y, fill = z)) + 
  scale_fill_discrete(labels = paste(levels(dat$z), table(dat$z)))
在最后一行,创建了图例的标签(labels)。

enter image description here


谢谢你的评论,这个方法可行,但我对问题进行了一些小更新,使得事情变得有点复杂,而且我出现了一个错误。请看看更新后的问题。 - ifreak
@ifreak,你的 z 变量不是离散的而是连续的吗? - Sven Hohenstein
z变量是连续的,它基本上是p值,但除了断点之外还有很多其他值,但我想要的是仅绘制在断点内的值的计数。 - ifreak
@ifreak 你可以使用 tmp <- cut(dat$z, seq(0, .5, .1)) 来创建切割。然后,你可以在绘图中使用它:scale_fill_gradient(breaks = seq(0, .5, .1), labels = paste(levels(tmp), table(tmp))) - Sven Hohenstein

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