如何在 Matplotlib 中指定类似箭头的线条样式?

2024-04-30

我想在 Matplotlib 中显示一组 xy 数据,以指示特定路径。理想情况下,将修改线条样式以使用类似箭头的补丁。我创建了一个模型,如下所示(使用 Omnigraphsketcher)。看来我应该能够覆盖常见的之一linestyle声明('-', '--', ':'等)达到这个效果。

请注意,我不想简单地用单个箭头连接每个数据点——实际数据点的间距并不均匀,我需要一致的箭头间距。


这是一个起点:

  1. 以固定的步数沿着路线行走(aspace在我下面的例子中)。

    A. 这涉及沿着两组点创建的线段采取步骤(x1,y1) and (x2,y2).

    B. 如果您的步长比线段长,则转移到下一组点。

  2. 此时确定线的角度。

  3. 画一个箭头,其倾斜度与角度相对应。

我写了一个小脚本来演示这一点:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.add_subplot(111)

# my random data
scale = 10 
np.random.seed(101)
x = np.random.random(10)*scale
y = np.random.random(10)*scale

# spacing of arrows
aspace = .1 # good value for scale of 1
aspace *= scale

# r is the distance spanned between pairs of points
r = [0]
for i in range(1,len(x)):
    dx = x[i]-x[i-1]
    dy = y[i]-y[i-1]
    r.append(np.sqrt(dx*dx+dy*dy))
r = np.array(r)

# rtot is a cumulative sum of r, it's used to save time
rtot = []
for i in range(len(r)):
    rtot.append(r[0:i].sum())
rtot.append(r.sum())

arrowData = [] # will hold tuples of x,y,theta for each arrow
arrowPos = 0 # current point on walk along data
rcount = 1 
while arrowPos < r.sum():
    x1,x2 = x[rcount-1],x[rcount]
    y1,y2 = y[rcount-1],y[rcount]
    da = arrowPos-rtot[rcount] 
    theta = np.arctan2((x2-x1),(y2-y1))
    ax = np.sin(theta)*da+x1
    ay = np.cos(theta)*da+y1
    arrowData.append((ax,ay,theta))
    arrowPos+=aspace
    while arrowPos > rtot[rcount+1]: 
        rcount+=1
        if arrowPos > rtot[-1]:
            break

# could be done in above block if you want
for ax,ay,theta in arrowData:
    # use aspace as a guide for size and length of things
    # scaling factors were chosen by experimenting a bit
    axes.arrow(ax,ay,
               np.sin(theta)*aspace/10,np.cos(theta)*aspace/10, 
               head_width=aspace/8)


axes.plot(x,y)
axes.set_xlim(x.min()*.9,x.max()*1.1)
axes.set_ylim(y.min()*.9,y.max()*1.1)

plt.show()

This example results in this figure: enter image description here

对于初学者来说,这里还有很大的改进空间:

  1. 一个可以用花式箭头补丁 http://matplotlib.sourceforge.net/api/artist_api.html?highlight=arrow#matplotlib.patches.FancyArrowPatch自定义箭头的外观。
  2. 在创建箭头时可以添加进一步的测试,以确保它们不会超出线条。这与在线急剧改变方向的顶点处或附近创建的箭头相关。上面最右边的点就是这种情况。
  3. 人们可以从这个脚本中创建一种可以在更广泛的情况下工作的方法,即使其更加可移植。

在研究这个问题时,我发现quiver http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.quiver绘图方法。它也许能够取代上述工作,但目前还不清楚这是否得到保证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Matplotlib 中指定类似箭头的线条样式? 的相关文章

  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • McNemar 在 Python 中的测试以及分类机器学习模型的比较 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有用 Python 实现的好的 McNemar 测试 我在 Scipy stats 或 Scikit
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 如何使用 Python boto3 获取 redshift 中的列名称

    我想使用 python boto3 获取 redshift 中的列名称 创建Redshift集群 将数据插入其中 配置的机密管理器 配置 SageMaker 笔记本 打开Jupyter Notebook写入以下代码 import boto3
  • 将 C++ 指针作为参数传递给 Cython 函数

    cdef extern from Foo h cdef cppclass Bar pass cdef class PyClass cdef Bar bar def cinit self Bar b bar b 这总是会给我类似的东西 Can
  • 使用 Python 3 动态插入到 sqlite

    我想使用 sqlite 写入多个表 但我不想提前手动指定查询 有数十种可能的排列 例如 def insert sqlite tablename data list global dbc dbc execute insert into tab
  • 如何使用 Homebrew 在 Mac 上安装 Python 2 和 3?

    我需要能够在 Python 2 和 3 之间来回切换 我如何使用 Homebrew 来做到这一点 因为我不想弄乱路径并陷入麻烦 现在我已经通过 Homebrew 安装了 2 7 我会用pyenv https github com yyuu
  • Jupyter 笔记本中未显示绘图图表

    我已经尝试解决这个问题几个小时了 我按照上面的步骤操作情节网站 https plot ly python getting started start plotting online并且图表仍然没有显示在笔记本中 这是我的情节代码 color
  • 时间序列数据预处理 - numpy strides 技巧以节省内存

    我正在预处理一个时间序列数据集 将其形状从二维 数据点 特征 更改为三维 数据点 时间窗口 特征 在这样的视角中 时间窗口 有时也称为回顾 指示作为输入变量来预测下一个时间段的先前时间步长 数据点的数量 换句话说 时间窗口是机器学习算法在对
  • 检索 geodjango 多边形对象的边界框

    如何在 geodjango 中获取 MultiPolygon 对象的边界框 在 API 中找不到任何内容http geodjango org docs geos html http geodjango org docs geos html
  • 使用seaborn绘制简单线图

    我正在尝试使用seaborn python 绘制ROC曲线 对于 matplotlib 我只需使用该函数plot plt plot one minus specificity sensitivity bs where one minus s
  • 将字符串中的随机字符转换为大写

    我尝试随机附加文本字符串 这样就不只是有像这样的输出 gt gt gt david 我最终会得到类似的东西 gt gt gt DaViD gt gt gt dAviD 我现在的代码是这样的 import random import stri
  • PyInstaller“ValueError:源代码字符串不能包含空字节”

    我得到了一个ValueError source code string cannot contain null bytes执行命令时pyinstaller main py在具有和不具有管理员权限的cmd中 Traceback most re
  • 使用 selenium 和 python 来提取 javascript 生成的 HTML?萤火虫?

    这里是Python新手 我遇到的是数据收集问题 我在这个网站上 当我用 Firebug 检查我想要的元素时 它显示了包含我需要的信息的源 然而常规源代码 没有 Firebug 不会给我这个信息 这意味着我也无法通过正常的 selenium
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • 将时间添加到日期时间

    我有一个像这样的日期字符串 然后使用strptime 所以就像这样 my time datetime datetime strptime 07 05 15 m d Y 现在我想添加 23 小时 59 分钟my time 我努力了 timed
  • 如何在 scikit 中加载 CSV 数据并将其用于朴素贝叶斯分类

    尝试加载自定义数据以在 Scikit 中执行 NB 分类 需要帮助将示例数据加载到 Scikit 中 然后执行 NB 如何加载目标的分类值 使用相同的数据进行训练和测试 或使用完整的数据集进行测试 Sl No Member ID Membe
  • Jupyter Notebook:带有小部件的交互式绘图

    我正在尝试生成一个依赖于小部件的交互式绘图 我遇到的问题是 当我使用滑块更改参数时 会在前一个绘图之后完成一个新绘图 而我预计只有一个绘图会根据参数发生变化 Example from ipywidgets import interact i

随机推荐

  • C++ 相当于 Java 的 System.arraycopy

    我正在尝试移植一些大量使用 System arraycopy 方法的 Java 代码 并想知道 C 中是否有等效的方法 基本上我想要有 n 个字节数组并将它们组合成一个大数组 每个初始数组的长度都可以是可变的 所以我不想经历计算结束数组长度
  • 有没有办法将 OwinRequest 转换为 HttpRequestBase?

    我正在编写一段 Owin 中间件 其中我需要使用一些遗留代码 该代码使用 HttpRequestBase 作为方法参数 遗留代码不遵循 SOLID 因此不可能将其扩展为使用 OwinRequest 而不是 HttpRequestBase 是
  • ./manage.py 使用 https 运行服务器

    manage py 运行服务器 0 0 0 0 8000 我使用上面的行作为我从 github 借用的代码的一部分 https github com ribeiroit boh puppet https github com ribeiro
  • 在可扩展列表中突出显示所选项目

    我有一个布局 其中左侧的片段中有一个可扩展列表 右侧有一个详细信息片段 这一切都很好 现在我想指出左侧的哪个项目的详细信息显示在右侧 而我在这里遇到了问题 在普通列表视图中 我通过将列表视图的选择模式设置为单一 然后使用基于 激活 状态的状
  • 在 Windows 上安装 MonoDevelop:满足 Gtk# 要求的解决方法?

    我已经安装了Mono 版本2 11 4 在我的Windows 7系统上 现在我打算安装单一开发 版本 3 0 4 7 然而 当我开始单一开发安装程序我收到以下错误消息 并且安装终止 好的 这可以通过获取轻松解决Gtk 安装程序来自here
  • 如何打印带有前导零的二进制整数?

    我正在做一些摆弄 我想打印我的 u16 中的所有位 let flags 0b0000000000101100u16 println flags b flags 这打印flags 0b101100 我如何让它打印flags 0b0000000
  • 图像从部署到heroku的django web应用程序中消失

    我正在开发一个 django 项目 使用 django Rest 框架编写 REST API 以在 Android 应用程序中使用它们 我的主要想法是在 Django 中开发后端 在 Android 中开发前端 项目部署在 Heroku 上
  • sap.m.Select:从空白选择输入元素开始

    当使用数据聚合时sap m Select 始终选择第一个条目 这是一个链接SDK预览 https sapui5 netweaver ondemand com sdk explored html sample sap m sample Sel
  • 为什么在没有声明的情况下不能从 .cpp 文件中获取模板函数的完全特化?

    以下代码不会生成编译 链接器错误 警告 A h include
  • scipy 中稀疏正定线性系统推荐的直接求解器?

    如果 scipy sparse 文档中对此有清楚的解释 我很抱歉 使用 scipy 时 您建议使用什么函数来求解稀疏正定线性方程组 我想使用直接方法 并且希望对列重新排序 以便在系数矩阵的 Cholesky 分解中尽可能保持稀疏性 理想情况
  • 如何创建 sqlalchemy 到 json

    我有一个 sqlalchemy 结果 labels session query LabelsData LabelsData id LabelsData name LabelsData color filter LabelsData dele
  • 从云调度程序调用 Google 云函数时出现权限被拒绝错误

    我正在尝试调用 Google 云函数 该函数是由云调度程序触发的 Http 但每当我尝试运行云调度程序时 它总是显示权限被拒绝错误 httpRequest status 403 insertId 14igacagbanzk3b jsonPa
  • 测试 SMTP 服务器通过 C# 运行

    如何在不发送消息的情况下通过 C 测试 SMTP 是否启动并运行 我当然可以尝试 try send email to email protected cdn cgi l email protection catch log smtp is
  • 您使用什么 cscope 参考卡? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 带圆角的 NSVisualEffectView

    如何在 OS X 中显示带圆角的 NSVisualEffectView 我添加 NSVisualEffectView 的代码 let visualEffectView NSVisualEffectView frame NSMakeRect
  • Pandas 从重采样中检索添加行的索引

    我有一个缺少行的数据框 我对其进行插值和重新采样 我想知道是否有办法在重新采样时获取添加到数据帧的行的索引 这就是我创建 重新采样 插入数据帧的方式 import numpy as np import pandas as pd from d
  • 使用 write.table 时避免在列名和行名中使用引号 [重复]

    这个问题在这里已经有答案了 我在名为 data txt 的文件中有以下数据 pid 1 2 4 15 18 20 1 at 100 200 89 189 299 788 2 at 8 78 33 89 90 99 3 xt 300 45 5
  • 嵌套 ListView、StreamBuilder 和子集合

    我正在尝试创建一个嵌套的 ListView 但不知道是否可以在嵌套视图中组合 2 个流构建器 因为它不起作用 在带有子集合查询的第二个 StreamBuilder 中 似乎没有返回数据 我不明白为什么 当我对文档 ID 进行硬编码时 我没有
  • 通过组合字符串将不同的行归为一行

    我有一个这样的数据集 Column1 Column2 1 A 1 B 1 C 2 D 2 E 2 F 2 G 3 H 3 I 我想将它合并成这样的东西 Column1 Column2 1 A B C 2 D E F G 3 H I 是否可以
  • 如何在 Matplotlib 中指定类似箭头的线条样式?

    我想在 Matplotlib 中显示一组 xy 数据 以指示特定路径 理想情况下 将修改线条样式以使用类似箭头的补丁 我创建了一个模型 如下所示 使用 Omnigraphsketcher 看来我应该能够覆盖常见的之一linestyle声明