在Julia中使用quiver绘制箭头时出现额外镜像线条问题求助
Julia Quiver绘图出现镜像线条的问题解决
问题原因
你遇到的额外镜像线条,本质是图像坐标系和常规绘图坐标系的y轴方向冲突:
- 用
plot(white_img)绘制图像时,Plots默认使用图像坐标系——y轴从上到下数值递增; - 而
quiver!默认遵循笛卡尔坐标系——y轴从下到上数值递增。
两者叠加后,箭头的y方向被反转,看起来像是出现了镜像线条。
Quiver绘图机制说明
quiver!是在当前绘图的坐标系上叠加箭头:
- 箭头起点为
(X[i], Y[i]),完全对应当前轴的刻度位置; - 箭头的方向和长度由
(VX[i], VY[i])决定,严格遵循当前坐标系的轴方向。
如果当前坐标系的y轴方向和你预期的笛卡尔方向相反,向量的y分量就会被反向,造成“镜像线条”的视觉效果。
解决方法
方法1:直接使用常规坐标系(推荐)
不需要先绘制图像,直接设置绘图背景为白色,让quiver在笛卡尔坐标系下工作:
using Plots X = [2, 10, 12, 20, 22, 30] Y = [2, 10, 12, 20, 22, 30] VX = [2, 8, 2, 8, 2, 8] VY = [2, 8, 2, 8, 2, 8] # 设置白色背景,同时限定轴范围匹配需求 plot(background_color=:white, xlims=(0, 35), ylims=(0, 35)) quiver!(X, Y, quiver=(VX, VY))
方法2:保留图像背景,反转y轴对齐坐标系
如果必须用图像作为背景,只需在绘制图像时反转y轴,让图像坐标系和quiver的笛卡尔坐标系一致:
using Plots, ColorTypes X = [2, 10, 12, 20, 22, 30] Y = [2, 10, 12, 20, 22, 30] VX = [2, 8, 2, 8, 2, 8] VY = [2, 8, 2, 8, 2, 8] white_img = fill(Gray(1.0), 50, 50) # 添加yflip=true反转y轴,对齐坐标系 plot(white_img, yflip=true) quiver!(X, Y, quiver=(VX, VY))
内容的提问来源于stack exchange,提问作者Beck Chen
相关产品推荐
相关产品推荐

