如何说服ggplot2的geom_text在时间序列图中标记指定日期?

16

我正在使用ggplot2绘制时间序列数据的简单折线图。我遇到的一个困难是标记对应于x轴数值即日期的特定点。

library(ggplot2)
library(scales)
date <- c("2011-09-19","2011-09-20","2011-09-21",
    "2011-09-22","2011-09-23","2011-09-26","2011-09-27")
price <- c(100,110,105,115,120,115,125)
tmp <- data.frame(date,price)
tmp$date <- as.Date(tmp$date)
p <- ggplot(tmp,aes(tmp$date,tmp$price))
p <- p + xlab("Date")
p <- p + ylab("Price")
p <- p + layer(geom = "line")
p <- p + opts(title="Simple price plot")
print(p)
我想要做的是给特定日期添加注释,这个日期可能是最大值、最小值或其他需要注意的值。到目前为止,我尝试过各种 geom_text 的变化,但都没有得到我想要的效果(或者说根本没用)。在SO上有一些相关的问题,但大多数似乎与散点图而不是时间序列有关;我尝试适应它们,但并不成功。我也花了一些时间阅读文档,但我的理解仍然很有限。任何指针将不胜感激。
1个回答

20

要在 ggplot 中添加文本,请使用 geom_text

方法1:将标签列添加到您的 data.frame

tmp$note <- LETTERS[1:7]

ggplot(tmp,aes(date, price, label=note)) +
  geom_line() +
  geom_text(vjust=0, colour="red")

在此输入图片描述

方法2:添加特定标签:

ggplot(tmp,aes(date, price, label=date)) +
  geom_line() +
  geom_text(data=tmp[3, ], label="Something of note", vjust=1)

输入图片说明


Andrie,谢谢你,我现在对它有了更好的理解。所以我可以这样做:p <- ggplot(tmp,aes(date, price, label=date)) + geom_line() + geom_text(data=tmp[which.max(tmp[,2]), ], label="Max",vjust=-1) 然后跟着 p <- p + geom_text(data=tmp[which.min(tmp[,2]), ], label="Min",vjust=1。我仍然在努力插入实际的最大/最小值。我被不同的结构、如何访问它们以及哪些包接受它们搞糊涂了! - SlowLearner
ggplot的情况下,很简单:数据结构必须始终是一个data.frame。您也不必为每个标签创建单独的图层。最简单的选择是创建一个包含每个标签的位置和文本的单个data.frame,并将其作为单个图层传递给ggplot。 - Andrie
我尝试使用ggplot(tmp,aes(x=price,label=date)) + geom_density() + geom_text(data=tmp[3, ], label="Something of note", vjust=1)给密度图加标签,但是出现了“Error: geom_text requires the following missing aesthetics: y”的错误提示,这似乎与统计学有关? - SlowLearner
听起来你的数据没有y轴位置。你需要手动为标签添加y轴位置,或者使用stat-density并将y值映射到提供的统计量。 - Andrie

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