我是一个R/ggplot的新手。我想创建一个geom_line图,用于连续变量时间序列,并添加由事件组成的层。连续变量及其时间戳存储在一个数据框中,事件及其时间戳存储在另一个数据框中。
我真正想做的是类似finance.google.com上的图表。在这些图表中,时间序列是股价,有“标志”来指示新闻事件。我实际上没有画金融图表,但图表类型相似。我正在尝试绘制日志文件数据的可视化效果。这是我想要的一个例子...
如果可以的话,我想为每个层使用单独的数据框(一个用于连续变量观测值,另一个用于事件)。
经过一些尝试和错误,这是我能得到的最接近的结果。在这里,我使用ggplot自带的数据集作为示例数据。“economics”包含一些时间序列数据,我想绘制它,“presidential”包含一些事件(总统选举)。
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
问题:
对于非常稀疏的事件,这样做还可以,但如果有一堆事件聚集在一起(通常在日志文件中会发生),就会变得混乱。有没有什么技巧可以用来整洁地显示在短时间内发生的一大堆事件?我想到了position_jitter,但这真的很难实现。如果有很多这样的事件“标志”,谷歌图表将它们叠放在一起。
实际上,我不喜欢将事件数据粘贴在连续测量显示的同一比例尺中。我更喜欢将其放在facet_grid中。问题在于,所有分面都必须来自相同的data.frame(不确定是否是这样)。如果是这样,那也似乎不理想(或者可能我只是不想使用reshape?)