如何使用direct.label标记特定轮廓

11

我对ggplot2相对较新,我在为我的等高线图添加适当的标签时遇到了问题。

使用经典的火山示例,我可以为默认的等高线图添加标签:

library(plyr)
library(ggplot2)
library(directlabels)
library(reshape)
volcano<-melt(volcano)
v<-ggplot(volcano, aes(x,y,z=z))
e<-v + stat_contour(aes(colour=..level..))
direct.label(e)
在上面的例子中,标签已经被适当地添加了,但如果我尝试为轮廓指定自己的断点,事情就会变得更加复杂:
e<-v + stat_contour(aes(breaks=c(160, 170, 180), colour=..level..))
direct.label(e)

现在,轮廓线是由我提供的断点指定的,但仍然为所有默认轮廓线显示标签。如何仅绘制图形轮廓线的标签?

一个相关的问题,如何为默认未包含的轮廓线绘制标签?比如说165的断点:

e<-v + stat_contour(aes(breaks=c(165), colour=..level..))
direct.label(e)

感谢任何帮助!


2
值得注意的是,direct.label() 函数位于 directlabels 包中。 - Drew Steen
我应该重新发布这个问题,还是人们仍在关注它? - Burton Guster
我建议您稍微改变一下提问方式,然后重新发布。据我所知,Directlabel并不是一个非常广泛使用的软件包。我敢打赌,有一种全ggplot的方法可以实现您想要做的事情;我会放弃对direct.label()的引用,看看其他人能想出什么解决方案。 - Drew Steen
很想知道是否有人弄清楚了这个问题。我也遇到了完全相同的问题。 - user1399311
2个回答

7

我无法容忍一个老问题没有被回答,而它的解决方法是如此简单。

这个简单的问题在 stat_contour() 函数内的映射有误。您需要这样调用:

v<-ggplot(volcano, aes(x=X1,y=X2,z=value))  # specify the mapping properly
e<-v + stat_contour(aes(colour=..level..), breaks=c(160, 170, 180))
direct.label(e)

在 aes 映射中不包括 breaks,并且包括 colour=..level..enter image description here

4
似乎无法与ggplot2版本>2.0.0兼容。 - jaimedash

2

使用ggplot > 2.0.0版本,您需要在 direct.label 调用中添加 method="bottom.pieces"(或 top.pieces)

library(directlabels)
direct.label(e, method="bottom.pieces")

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