gpt4 book ai didi

R + ggplot : Time series with events

转载 作者:行者123 更新时间:2023-12-03 05:45:27 27 4
gpt4 key购买 nike

我是 R/ggplot 新手。我想创建连续变量时间序列的 geom_line 图,然后添加由事件组成的图层。连续变量及其时间戳存储在一个 data.frame 中,事件及其时间戳存储在另一个 data.frame 中。

真正想做的是类似于finance.google.com上的图表。其中,时间序列是股票价格,并且有“标志”来指示新闻事件。我实际上并不是在绘制金融内容,但图表的类型是相似的。我正在尝试绘制日志文件数据的可视化图。这是我的意思的一个例子......

google chart with events

如果可取(?),我想为每一层使用单独的 data.frame(一个用于连续变量观察,另一个用于事件)。

经过一番尝试和错误,这已经是我能得到的最接近的结果了。在这里,我使用 ggplot 附带的数据集中的示例数据。 “经济学”包含一些我想要绘制的时间序列数据,“总统”包含一些事件(总统选举)。

library(ggplot2)
data(presidential)
data(economics)

presidential <- presidential[-(1:3),]
yrng <- range(economics$unemploy)
ymin <- yrng[1]
ymax <- yrng[1] + 0.1*(yrng[2]-yrng[1])

p2 <- ggplot()
p2 <- p2 + geom_line(mapping=aes(x=date, y=unemploy), data=economics , size=3, alpha=0.5)
p2 <- p2 + scale_x_date("time") + scale_y_continuous(name="unemployed [1000's]")
p2 <- p2 + geom_segment(mapping=aes(x=start,y=ymin, xend=start, yend=ymax, colour=name), data=presidential, size=2, alpha=0.5)
p2 <- p2 + geom_point(mapping=aes(x=start,y=ymax, colour=name ), data=presidential, size=3)
p2 <- p2 + geom_text(mapping=aes(x=start, y=ymax, label=name, angle=20, hjust=-0.1, vjust=0.1),size=6, data=presidential)
p2

my attempt

问题:

  • 这对于非常稀疏的事件来说是可以的,但是如果它们有一个集群(就像日志文件中经常发生的那样),它就会变得困惑。我可以使用某种技术来整齐地显示短时间内发生的一堆事件吗?我正在考虑position_jitter,但我真的很难走到这一步。如果这些事件“标志”很多,Google 图表会将这些事件“标志”堆叠在一起。

  • 我实际上不喜欢将事件数据固定在与连续测量显示相同的比例中。我更愿意将它放在facet_grid 中。问题是所有方面都必须来自同一个 data.frame (不确定这是否属实)。如果是这样,那似乎也不理想(或者也许我只是想避免使用 reshape ?)

最佳答案

现在我和其他人一样喜欢 ggplot,但是如果你想制作 Google Finance 类型的图表,为什么不直接使用 Google 图形 API 来完成呢?!?你一定会喜欢这个:

install.packages("googleVis")
library(googleVis)

dates <- seq(as.Date("2011/1/1"), as.Date("2011/12/31"), "days")
happiness <- rnorm(365)^ 2
happiness[333:365] <- happiness[333:365] * 3 + 20
Title <- NA
Annotation <- NA
df <- data.frame(dates, happiness, Title, Annotation)
df$Title[333] <- "Discovers Google Viz"
df$Annotation[333] <- "Google Viz API interface by Markus Gesmann causes acute increases in happiness."

### Everything above here is just for making up data ###
## from here down is the actual graphics bits ###
AnnoTimeLine <- gvisAnnotatedTimeLine(df, datevar="dates",
numvar="happiness",
titlevar="Title", annotationvar="Annotation",
options=list(displayAnnotations=TRUE,
legendPosition='newRow',
width=600, height=300)
)
# Display chart
plot(AnnoTimeLine)
# Create Google Gadget
cat(createGoogleGadget(AnnoTimeLine), file="annotimeline.xml")

它产生了这个奇妙的图表:

enter image description here

关于R + ggplot : Time series with events,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317584/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com