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)

谢谢你的帮助!

4

2 回答 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 映射中,并且colour=..level..包括在内。

在此处输入图像描述

于 2014-07-21T01:46:49.987 回答
2

使用 ggplot > 2.0.0 您需要将 method="bottom.pieces" (或 top.pieces)添加到 direct.label 调用

library(directlabels)
direct.label(e, method="bottom.pieces")
于 2018-05-10T09:59:50.953 回答