楼主: 北非i
9574 12

[实际应用] ggplot2 如何画箭头表示的风速风向时间序列图 [推广有奖]

  • 0关注
  • 0粉丝

已卖:11份资源

高中生

95%

还不是VIP/贵宾

-

威望
0
论坛币
26 个
通用积分
3.4661
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
358 点
帖子
7
精华
0
在线时间
73 小时
注册时间
2018-6-7
最后登录
2020-11-3

楼主
北非i 发表于 2019-4-23 21:52:45 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
想实现如下图的风速风向图:每一个数据是一个小时的风速风向数据,根据风速风向数据画出给定时间范围的风速风向到一条时间序列轴上,用箭头的长短代表风速大小,箭头方向代表风速方向,如果某一时刻风速或风向有NA值可以跳过这一时刻继续绘制下一时刻。
希望能够通过ggplot2实现。
请大家帮忙,谢谢!

批注 2019-04-23 213618.png
风速风向.rar (1.02 KB, 需要: 1 个论坛币) 本附件包括:
  • 风速风向.csv



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:时间序列 时间范围 风向图 ggplot2

沙发
nkunku(未真实交易用户) 发表于 2019-4-24 05:49:32
这个我也想知道。帮你顶

藤椅
cheetahfly(未真实交易用户) 在职认证  发表于 2019-4-24 09:18:25
为啥附件还要收一个论坛币?

板凳
北非i(未真实交易用户) 发表于 2019-4-24 09:41:50
cheetahfly 发表于 2019-4-24 09:18
为啥附件还要收一个论坛币?
您好,附件已取消论坛币,有好的想法欢迎指教。

报纸
Whig(未真实交易用户) 在职认证  发表于 2019-4-24 12:04:18
谷歌呀,https://stackoverflow.com/questions/21912025/ggplot2-time-series-plot-with-colour-coded-wind-direction-arrows
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

地板
cheetahfly(未真实交易用户) 在职认证  发表于 2019-4-24 13:58:43
先用三角函数计算出每一个线条的起始坐标——x0, y0, x1, y1,这部分我就不赘述了,假设整理好之后的数据表为:df
  1. library(tidyverse)
  2. df %>%
  3.   ggplot(aes(x = factor(x0))) +
  4.   geom_segment(aes(y = y0, xend = x1, yend = y1), arrow = arrow(angle = 30, length = unit(0.2, "cm"))) +
  5.   ylim(-15, 15) +
  6.   coord_fixed() +  # 这一条不要漏掉,不然角度会不对。
  7.   scale_x_discrete(label = b$date) +
  8.   labs(x = NULL, y = NULL) +
  9.   theme(axis.text.x = element_text(angle = 90, size = 4))
复制代码

你的数据画出来的是:
风力风向图.png

7
北非i(未真实交易用户) 发表于 2019-4-24 16:37:14
cheetahfly 发表于 2019-4-24 13:58
先用三角函数计算出每一个线条的起始坐标——x0, y0, x1, y1,这部分我就不赘述了,假设整理好之后的数据表 ...
谢谢版主的回复,自己试了一下,并参考了楼上stackoverflow的回复,x1如何表示没想明白(原谅我3把刀的思路,哈哈)


我自己的代码如下:
  1. df$x0=as.POSIXct(df$date) #date转化为时间格式,时间序列绘图显示更好一些
  2. df$y0=0
  3. df$x1=df$x0+df$ws* cos(df$wd / 180 * pi) #x1如何表示,没有想明白
  4. df$y1=0+df$ws* sin(df$wd / 180 * pi)
复制代码



希望版主能再指点下。
------------因为加了‘$’符号,代码显示有点问题,但编辑的时候正常。代码截图如下:
000.png

8
cheetahfly(未真实交易用户) 在职认证  发表于 2019-4-24 21:19:44
北非i 发表于 2019-4-24 16:37
谢谢版主的回复,自己试了一下,并参考了楼上stackoverflow的回复,x1如何表示没想明白(原谅我3把刀的思 ...
我在画图过程中,并没有用时间格式来作为横轴,因为这样和纵轴的单位不一致,关键是在表示角度时要求横竖坐标的比例是可控的,所以只是用时间来做标签,但真正的度量是用的整数代替:
  1. library(tidyverse)
  2. df %>%
  3.   arrange(date)
  4.   mutate(x0 = row_number(),
  5.          y0 = 0,
  6.          x1 = x0 + cospi(wd / 180),
  7.          y1 = sinpi(wd / 180))
复制代码
我楼上的scale_x_discrete(label = b$date) 一句就是用时间做个标签而已。

9
北非i(未真实交易用户) 发表于 2019-4-24 21:48:48
cheetahfly 发表于 2019-4-24 21:19
我在画图过程中,并没有用时间格式来作为横轴,因为这样和纵轴的单位不一致,关键是在表示角度时要求横竖 ...
谢谢版主的耐心回复,完美解决。点赞!

10
xiaoliu1013(真实交易用户) 发表于 2019-9-9 23:52:28
能提供一下完整的正确代码吗?我试了好久没有搞出来

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-16 23:25