如何使用 matplotlib 制作“更完整”的轴箭头

2024-01-08

我有以下代码:

from mpl_toolkits.axes_grid.axislines import SubplotZero
from matplotlib.transforms import BlendedGenericTransform
import matplotlib.pyplot as plt
import numpy

if 1:
    fig = plt.figure(1)
    ax = SubplotZero(fig, 111)
    fig.add_subplot(ax)

    ax.axhline(linewidth=1.7, color="black")
    ax.axvline(linewidth=1.7, color="black")

    plt.xticks([1])
    plt.yticks([])

    ax.text(0, 1.05, 'y', transform=BlendedGenericTransform(ax.transData, ax.transAxes), ha='center')
    ax.text(1.05, 0, 'x', transform=BlendedGenericTransform(ax.transAxes, ax.transData), va='center')

    for direction in ["xzero", "yzero"]:
        ax.axis[direction].set_axisline_style("-|>")
        ax.axis[direction].set_visible(True)

    for direction in ["left", "right", "bottom", "top"]:
        ax.axis[direction].set_visible(False)

    x = numpy.linspace(-0.5, 1., 1000)
    ax.plot(x, numpy.sin(x*numpy.pi), linewidth=1.2, color="black")

    plt.show()

生成以下图像:

与实际图表相比,轴箭头看起来有些残留。我如何稍微调整它们的大小,使它们相对于轴的宽度看起来正常。

另外 - 这里很难看到,但箭头的内部是蓝色的 - 我如何将其更改为黑色?


我的解决方案与 nebffa 的解决方案基本相同。我创建了一个最小的示例,用于计算 y 轴的箭头宽度和长度,以匹配为 x 轴指定的箭头宽度和长度。我希望这对其他人有帮助。

import pylab as pl

fig = pl.figure()
ax = fig.add_subplot(111)

x = pl.arange(-5,5,0.1)
ax.plot(x, x**2-8.8)

xmin, xmax = ax.get_xlim()
ymin, ymax = ax.get_ylim()

# removing the default axis on all sides:
for side in ['bottom','right','top','left']:
    ax.spines[side].set_visible(False)

# removing the axis ticks
pl.xticks([]) # labels
pl.yticks([])
ax.xaxis.set_ticks_position('none') # tick markers
ax.yaxis.set_ticks_position('none')

# wider figure for demonstration
fig.set_size_inches(4,2.2)

# get width and height of axes object to compute
# matching arrowhead length and width
dps = fig.dpi_scale_trans.inverted()
bbox = ax.get_window_extent().transformed(dps)
width, height = bbox.width, bbox.height

# manual arrowhead width and length
hw = 1./20.*(ymax-ymin)
hl = 1./20.*(xmax-xmin)
lw = 1. # axis line width
ohg = 0.3 # arrow overhang

# compute matching arrowhead length and width
yhw = hw/(ymax-ymin)*(xmax-xmin)* height/width
yhl = hl/(xmax-xmin)*(ymax-ymin)* width/height

# draw x and y axis
ax.arrow(xmin, 0, xmax-xmin, 0., fc='k', ec='k', lw = lw,
         head_width=hw, head_length=hl, overhang = ohg,
         length_includes_head= True, clip_on = False)

ax.arrow(0, ymin, 0., ymax-ymin, fc='k', ec='k', lw = lw,
         head_width=yhw, head_length=yhl, overhang = ohg,
         length_includes_head= True, clip_on = False)

# clip_on = False if only positive x or y values.

pl.savefig('arrow_axis.png', dpi = 300)

生产:

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

如何使用 matplotlib 制作“更完整”的轴箭头 的相关文章

随机推荐

  • 使用 Handlebars 重复查找

    给定一个对象数组 我想使用嵌套对象的一个 属性来查找 Handlebars 中关联对象的各种属性 在此示例中 我想显示每所大学的学生列表 以及每个学生所属院系的信息 我的代码有效 但嵌套查找非常重复 lookup lookup majors
  • 检测脚本的位置而不是调用它的页面

    我想知道是否可以以某种方式找到脚本的位置而不是调用它的页面 例如如果页面是http xxx yyy com a htm http xxx yyy com a htm 然后我写了 location href 我得到了那个位置而不是http a
  • 从 C++ 访问 QML 对象

    以下是将 QML 文档加载到 C 中的代码 QmlDocument qml QmlDocument create asset main qml parent this Create root object for the UI Abstra
  • SelectionStart 和 SelectionEnd 对于文本区域意味着什么?

    我遇到了以下代码片段 将 Enter 插入到按下 ctrl Enter 的文本区域中的文本中 txtChatMessage keydown MessageTextOnKeyEnter function MessageTextOnKeyEnt
  • Swift 中的懒惰

    Why is lazy这里用的 extension SequenceType func mapSome u transform Generator Element gt U gt U var result U for case let x
  • 在haskell中剖析java类文件

    我今年早些时候刚刚开始学习 Haskell 语言 并且正在开发一个项目 该项目输入一个 java 类文件 即 FileName1 class 并剖析该文件以打印出以下内容 类文件定义的类名 类的方法数量 它们的名称和类型 我做了一些研究 发
  • C# 数据库应用程序并发

    我曾经用 C 编写过一个多用户应用程序 使用 SQL Server 2005 Express 作为后端 我有一个订单集合 为了使用此类 您需要实例化它并调用 Load CustomerCode 方法 以便使用指定客户的订单填充集合 我的问题
  • Vb.Net 属性语法

    我问过我的同事 甚至试图在互联网上查找这个问题 但我一直无法得到答案 有什么区别 Public Property Name As String and Public Property Name As String 在属性名称后面添加 有什么
  • 如何使这个简单的 OpenGL 代码(在“宽松”的 3.3 和 4.2 配置文件中工作)在严格的 3.2 和 4.2 核心配置文件中工作?

    我有一些 3D 代码 我注意到它们不会在严格的核心配置文件中呈现 但在 正常 未明确请求仅作为核心 配置文件上下文中正常 为了隔离这个问题 我编写了最简单的 OpenGL 程序 仅绘制一个三角形和一个矩形 我已经发布了OpenGL程序作为这
  • ASP.NET MVC - 简单面包屑(站点地图)

    我开发了一个 ASP NET MVC 2 应用程序 我想在每个页面中放置一个简单的面包屑 站点地图 如下所示 首页 gt 电影 gt 详情 它等于 URL http localhost home movies details http lo
  • 带有页眉、页脚和正文的简单 div

    我需要一个简单的div with header footer and body content The header and footer需要是fixed和heightdiv 的应该是250px or max 500px和它的width i
  • 从标准输入 C++ 读取数百万个整数的最快方法?

    我正在开发一个排序项目 现在主要瓶颈是读取数据 我的程序需要大约 20 秒才能对从 stdin 读取的 100 000 000 个整数进行排序cin and std ios sync with stdio false 但事实证明 其中 10
  • jquery 事件在附加后不起作用

    http jsfiddle net YsnhT 2 http jsfiddle net YsnhT 2 Jquery 事件在追加后不起作用 单击 保存 按钮后 我需要文本区域的值 span8 on click btn function va
  • 调用生成的 Serializer() 方法时收到 NoClassDefFoundError

    我得到了NoClassDefFoundError当尝试调用Foo serializer 上的方法 Serializable class 这是我的测试用例 Serializable data class Foo val data String
  • XMLHttpRequest 基本身份验证失败

    知道为什么吗XMLHttpRequest具有正确的凭据Pebble JS Framework http developer getpebble com 2 guides javascript guide html在 Android 上无法进
  • 铁路搜索表

    我正在创建一个跟踪用户和成就的应用程序 例如 xbox live 等 这些表通过连接表链接 我希望在我的索引上有一个搜索表单 让用户输入用户名 然后加载一个新页面 其中包含用户已获得的所有成就的列表 我不完全确定如何在索引上设置此搜索表单
  • 你能在Sqlite3(使用Django)中实现不区分大小写的“唯一”约束吗?

    假设我正在使用 Python 2 5 的内置默认 sqlite3 并且我有一个包含以下代码的 Django 模型类 class SomeEntity models Model some field models CharField max
  • 动态构建 SQL 查询(postgres 和 javascript)

    我有一个 javascript 函数需要返回产品列表 它使用 postgres 来检索产品列表 该函数传递一个categoryId和一个可选的typeId 所以我需要基于这些构建一个 SQL 查询 当然我可以做这样的事情 async fun
  • 具有多个 bert 输入的 SMOTE

    我正在使用 Keras 和 Bert HuggingFace 构建多类文本分类模型 但我有一个非常不平衡的数据集 我使用了 Sklearn 中的 SMOTE 来为欠平衡类生成额外的样本 我总共有 45 个 当我使用 Bert Tokeniz
  • 如何使用 matplotlib 制作“更完整”的轴箭头

    我有以下代码 from mpl toolkits axes grid axislines import SubplotZero from matplotlib transforms import BlendedGenericTransfor