带有箭头/矢量的ggplot2风时间系列

从气象数据(温度,风和湿度的小时值)我设法绘制风速和风向的时间序列。 现在我想在时间序列图上添加风向量。 在这里,您可以看到我想要的输出(箭头绘制在实际绘图上)。

在这里输入图像描述

我正在使用ggplot2,一直在寻找通过stackoverflow,ggplot2软件包文档(将继续),但没有找到解决方案。 任何想法或指示将看起来是一个起点。

提前致谢

编辑问题正如@slowlearner的评论中所建议的那样,我在此添加代码和数据以创建可重复的示例。 它看起来像geom_segment可以做到这一点。 我设法计算geom_segment中的明细,但无法弄清楚如何找到xend,因为x轴是时间轴。 我有风速和风向数据,因此我可以计算geom_segment的x,y风分量,但需要将x转换为时间格式。

这是用于绘图(温度)和数据的代码

for (i in 1:2 ) {

rams=subset(data,data$stat_id %in% i)
tore=subset(torre,torre$stat_id %in% i)

# Gràfica en ggplot

# Gráfica de evolución temporal de las estaciones de la zona

gtitol=places$nom[places$stat_id == i]

myplot=ggplot(data=rams,aes(x=datetime, y=tempc, colour="RAMS")) +
  geom_line()  +  ylab("Temperatura (ºC)") + xlab(" ") + 
  ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") +
  scale_y_continuous(limits = c(0,40)) +
  geom_line(data=tore,aes(x=datetime,y=temp,colour = "Torre")) 
#scale_y_continuous(breaks = round(seq(min(data$tempc), max(data$tempc), by = 2),0))


ggsave(myplot,filename=paste("RAMS-",i,".png",sep=""),width=7.78,height=5.79)

}

在尝试了geom_segment文档之后

p=ggplot(tore, aes(x =datetime, y = 5))
p + geom_segment(aes(xend = datetime, yend = 5 + v), arrow = arrow(length = unit(0.1,"cm")))

获得这种数字。 你可以看到x坐标是日期时间,我应该如何将风组件转换为xend? 现在xend等于日期时间,但我想像“日期时间+ xwindcomp”

在这里输入图像描述

谢谢你的帮助


就像序言一样,请确保在未来的问题中包含所有代码和相关数据。 如果你看看上面的问题,你会看到一些诸如torre对象没有被定义。 这意味着我们无法复制并粘贴到我们的R设置中。 此外,您链接的数据不能用于问题中的代码,因为它是一个有限的子集。 我的建议是:(a)创建看起来像您正在使用的数据的假数据(b) 您发布之前,将代码保持在绝对最低限度(c)测试并在新的R会话中仔细检查代码和数据。

据我可以告诉你想要像下面的东西。 当然,你将不得不为了你自己的目的去适应它,但它应该给你一些关于如何解决你的问题的想法。 注意大部分化妆品属性,例如线条颜色,厚度,图例和标题已从绘图中省略:它们对于此问题的目的并不重要。 编辑另一种方法可能是对风数据使用相同的数据帧,然后使用分面变量在不同但链接的图中显示速度。

require(ggplot2)
require(scales)
require(gridExtra)
require(lubridate)
set.seed(1234)

# create fake data for temperature
mydf <- data.frame(datetime = ISOdatetime(2013,08,04,0,0,0) +
                   seq(0:50)*10*60,
                   temp = runif(51, 15, 25))

# take a subset of temperature data,
# basically sampling every 60 minutes
wind <- mydf[minute(mydf$datetime) == 0, ]
# then create fake wind velocity data
wind$velocity <- runif(nrow(wind), -5, 20)
# define an end point for geom_segment
wind$x.end <- wind$datetime + minutes(60)

ggplot(data = mydf, aes(x = datetime, y = temp, group = 1)) +
    geom_line() +
    geom_segment(data = wind,
                 size = 3,
                 aes(x = datetime,
                     xend = x.end,
                     y = 10,
                     yend = velocity),
                 arrow = arrow(length = unit(0.5, "cm"))) +
    theme()

这会生成以下图表:


使用十进制度计算风向。 假设你想0度为北(上),使用以下内容:

ggplot(data = wind, aes(x=datetime, y=temp)) + 
  geom_text(aes(angle=-wind_dir_degrees+90), label="→")
链接地址: http://www.djcxy.com/p/15111.html

上一篇: ggplot2 wind time series with arrows/vectors

下一篇: Is there a way to alias tmux commands?