楼主: llb_321
3889 16

[实际应用] 【独家发布】请教R实现向量场流线图的方法 [推广有奖]

  • 3关注
  • 49粉丝

教授VIP

已卖:595份资源

学科带头人

9%

还不是VIP/贵宾

-

TA的文库  其他...

LATEX & R 模板和代码

威望
2
论坛币
28191 个
通用积分
1739.6743
学术水平
410 点
热心指数
421 点
信用等级
355 点
经验
2099 点
帖子
1410
精华
1
在线时间
1035 小时
注册时间
2010-6-18
最后登录
2023-8-18

初级热心勋章 初级信用勋章 中级热心勋章 中级信用勋章 初级学术勋章

楼主
llb_321 在职认证  发表于 2021-6-23 21:30:41 |AI写论文
500论坛币
向量场,已经能用R画出第二张图,即向量场内每个点的向量方向和大小(这张是风场数据)。



另外我知道,用python的plt.streamline函数可以画出第一张图。

实际上,两种图所用的数据是一样的。


现请教各位老师,第一张图,向量场的流线图,能否在R中(不调用python等外部代码)实现。



3306208143.png windField1.png

最佳答案

owenqi 查看完整内容

图一的数据我参考的是这个 完全模仿可能还需要调整,大致的话,我搜了一下,用metR的geom_streamline可以吧颜色的地方我没仔细看,可以参考这里看看能不能映射。
关键词:R实现 python Stream line Stre

本帖被以下文库推荐

沙发
owenqi 在职认证  学生认证  发表于 2021-6-23 21:30:42
图一的数据我参考的是这个
https://spaces.ac.cn/archives/3120
完全模仿可能还需要调整,大致的话,我搜了一下,用metR的geom_streamline可以吧
  1. library(ggplot2)
  2. library(metR)

  3. x0 <- c(0,0,1/.002, 375)
  4. y0 <- c(0,1/.003,0,250)

  5. a <- .1; b <- .002; c <- .0001; d <- .3; e <- .003; f <- .0002;
  6. x <- seq(-100, 601, by = 5)
  7. y <- seq(-100, 501, by = 5)

  8. mx <- t(matrix(rep(x, length(y)), nrow = length(x)))
  9. my <- t(matrix(rep(y, length(x)), nrow = length(x), byrow = TRUE))

  10. s <- a*(1-b*mx)*mx-c*my*mx
  11. t <- d*(1-e*my)*my-f*mx*my
  12. r <- sqrt(s^2 + t^2)

  13. df <- data.frame(x = c(mx), y = c(my), s = c(s), t = c(t), r = c(r))
  14. pts <- data.frame(x0, y0)

  15. g <- ggplot(df, aes(x,y)) + theme_bw() + xlab('x1') + ylab('x2') +
  16.   theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank()) +
  17.   geom_point(data = pts, aes(x0, y0), size = 3, colour = 'darkgreen') +
  18.   geom_hline(yintercept = c(0, 250, 1/.003), linetype = 'dashed', size = 1.25, alpha = .5, colour = 'darkblue') +
  19.   geom_vline(xintercept = c(0, 375, 500), linetype = 'dashed', size = 1.25, alpha = .5, colour = 'darkblue') +
  20.   geom_streamline(aes(dx = s, dy = t), L = 100, skip = 3, colour = 'red', alpha = .5)
复制代码
颜色的地方我没仔细看,可以参考这里看看能不能映射。
https://semba-blog.netlify.app/03/20/2019/plotting-streamlines-of-surface-current-with-ggplot2-and-metr-package/
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 鼓励积极发帖讨论
cheetahfly + 30 精彩帖子

总评分: 论坛币 + 30  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

藤椅
tmdxyz 发表于 2021-6-24 07:34:53
期待大神。我也想借此机会学习学习!

板凳
llb_321 在职认证  发表于 2021-6-24 09:50:47
owenqi 发表于 2021-6-23 21:30
图一的数据我参考的是这个

完全模仿可能还需要调整,大致的话,我搜了一下,用metR的geom_streamline可以 ...
哥你太强大啦。我尝试了一些包的streamline都没成,原来是这个metR
至于数据、颜色什么的不是问题。感谢!

报纸
llb_321 在职认证  发表于 2021-6-24 09:51:41
tmdxyz 发表于 2021-6-24 07:34
期待大神。我也想借此机会学习学习!

地板
llb_321 在职认证  发表于 2021-6-24 09:53:34
owenqi 发表于 2021-6-23 21:30
图一的数据我参考的是这个

完全模仿可能还需要调整,大致的话,我搜了一下,用metR的geom_streamline可以 ...
我看的就是这个科学空间上的图,没好意思去打扰苏神。

7
tmdxyz 发表于 2021-6-24 10:28:36
我复制并运行了代码 可是出不来图,提示

Error in c * my * mx : non-conformable arrays

Error in f * mx * my : non-conformable arrays


8
llb_321 在职认证  发表于 2021-6-24 19:49:23

再次感谢O神的帮助。

windfieldstreamline.PNG (235.86 KB)

windfieldstreamline.PNG

9
llb_321 在职认证  发表于 2021-6-24 19:50:19
tmdxyz 发表于 2021-6-24 10:28
我复制并运行了代码 可是出不来图,提示

Error in c * my * mx : non-conformable arrays
代码没问题吖

10
tmdxyz 发表于 2021-6-25 10:31:10
llb_321 发表于 2021-6-24 19:49
第二张图的数据,用metR包的geom_streamline()重新绘制该地区的风场流线图,以风速数据生成contour作为背景 ...
楼主说 这两个图用的是同样的数据 可是采用不同的包 展示出来的效果却有很大的区别 能否贴出来这个图的代码供大家学习一下呀 谢谢了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-3 04:49