如何使用 ggplot2 + directlabels 为标签使用自定义名称

Posted

技术标签:

【中文标题】如何使用 ggplot2 + directlabels 为标签使用自定义名称【英文标题】:How to use custom names for labels with ggplot2 + directlabels 【发布时间】:2012-07-16 22:23:24 【问题描述】:

我在 geom_line() 图中使用带有 directlabels 包的 ggplot2,我希望其中一个标签读取“X-M”。但是,在我的data.frame()“X-M”中,列名被重命名为“X.M”,我找不到有关如何为direct.label 函数提供自定义标签名称的文档,也找不到帮助阅读源代码。 (directabels 似乎不尊重在 ggplot 比例中设置的标签名称,这是我尝试的第一件事。)

示例代码:

library("scales")
library("reshape2")
library("ggplot2")
library("directlabels")

data = data.frame(
  C = c(1.2, 1.4, 0.3, -2.0, 0.5),
  I = c(1.2, 1.5, -1.3, -3.8, 1.8),
  G = c(0.2, 0.3, 0.3, 0.2, 0.2),
  "X-M" = c(2.9, -0.7, 0.3, -2.8, 1.5) +
          c(-2.7, 0.2, 0.4, 3.6, -2.4),
  year = c("2006", "2007", "2008", "2009", "2010"))

p <- ggplot(data = melt(data), aes(year, value, color = variable)) +
  geom_line(aes(group = variable)) +
  scale_color_hue(breaks = c("C", "I", "G", "X.M"),
                  labels = c("C", "I", "G", "X-M"))  # directlabels doesn't
                                                     # use this

# Compare:
p

# with:
direct.label(p, list(last.points, hjust = -0.25))

结果图可见here。带有直接标签的那个使用“X.M”而不是“X-M”。非常感谢!

【问题讨论】:

+1 用于可重现的示例。欢迎来到 SO。 【参考方案1】:

directlabels 包似乎从数据中的列名中获取标签。

这意味着您必须首先确保数据中的标签正确无误。为此,您必须在创建data.frame 时设置check.names=FALSE

data = data.frame(
  C = c(1.2, 1.4, 0.3, -2.0, 0.5),
  I = c(1.2, 1.5, -1.3, -3.8, 1.8),
  G = c(0.2, 0.3, 0.3, 0.2, 0.2),
  "X-M" = c(2.9, -0.7, 0.3, -2.8, 1.5) +
    c(-2.7, 0.2, 0.4, 3.6, -2.4),
  year = c("2006", "2007", "2008", "2009", "2010"),
  check.names=FALSE)

data
     C    I   G  X-M year
1  1.2  1.2 0.2  0.2 2006
2  1.4  1.5 0.3 -0.5 2007
3  0.3 -1.3 0.3  0.7 2008
4 -2.0 -3.8 0.2  0.8 2009
5  0.5  1.8 0.2 -0.9 2010

现在剧情:

p <- ggplot(data = melt(data), aes(year, value, color = variable)) +
  geom_line(aes(group = variable)) 
direct.label(p, list(last.points, hjust = -0.25))

【讨论】:

非常好,完美运行,谢谢!!我完全错过了 data.frame() 中的 check.names!

以上是关于如何使用 ggplot2 + directlabels 为标签使用自定义名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在ggplot2中使用希腊符号?

如何使用 ggplot2 在 R 中制作具有透明背景的图形?

ggplot2:如何显示图例[重复]

如何避免使用 ggtern/ggplot2 剪切标签(如 xpd=TRUE)

使用ggplot2时如何更改箱线图的顺序?

如何使用 ggplot2 + directlabels 为标签使用自定义名称