我正在使用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上有一些相关的问题,但大多数似乎与散点图而不是时间序列有关;我尝试适应它们,但并不成功。我也花了一些时间阅读文档,但我的理解仍然很有限。任何指针将不胜感激。
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
。我仍然在努力插入实际的最大/最小值。我被不同的结构、如何访问它们以及哪些包接受它们搞糊涂了! - SlowLearnerggplot
的情况下,很简单:数据结构必须始终是一个data.frame。您也不必为每个标签创建单独的图层。最简单的选择是创建一个包含每个标签的位置和文本的单个data.frame,并将其作为单个图层传递给ggplot。 - Andrieggplot(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”的错误提示,这似乎与统计学有关? - SlowLearnerstat-density
并将y值映射到提供的统计量。 - Andrie