根据气象数据(温度,风和湿度的每小时值),我设法绘制风速和风向的时间序列。现在我想在时间序列图上添加风向量。在这里你可以看到我想要的输出(在实际情节上绘制的箭头)。
我正在使用ggplot2,一直在查看stackoverflow,ggplot2包文档(将继续)但找不到解决方案。任何想法或指示在哪里看都是一个起点。
提前致谢
编辑问题 正如@slowlearner在评论中所建议的那样,我在这里添加代码和数据以制作可重现的示例。貌似geom_segment可以做到这一点。我设法在geom_segment中计算yend但是无法弄清楚如何找到xend,因为x轴是时间轴。我有风速和风向数据,所以我可以计算geom_segment的x,y风成分,但x需要转换为时间格式。
以下是用于绘图(温度)和data
的代码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坐标是datetime,我应该如何转换wind组件来获取xend?到现在为止xend等于datetime,但我想要像“datetime + xwindcomp”
这样的东西
感谢您的帮助
答案 0 :(得分:3)
作为序言,请确保在未来的问题中包含所有代码和相关数据。如果您查看上面的问题,您会发现某些对象(例如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()
这会生成以下图表:
答案 1 :(得分:1)
使用十进制度计算风的方向。假设您希望0度为北(向上),请使用以下内容:
ggplot(data = wind, aes(x=datetime, y=temp)) +
geom_text(aes(angle=-wind_dir_degrees+90), label="→")