使用 matplotlib 组合两个独立图的最佳方法是什么?

2024-01-01

我不断地问自己这个问题:如何以模块化的方式将不同的绘图与 matplotlib 轻松组合?

比方说,我编写了一个显示图形节点位置的函数。同时,我制作了另一个绘制一些多边形的函数。现在,组合输出的正确方法是什么,使节点看起来位于多边形内部?改变整个单独图的透明度、位置等的可能性怎么样?两个初始函数的结构应该是什么?

有没有一种聪明且通用的方法来做到这一点?


只是为了详细说明@Alan所说的内容,您通常会构建与此类似的绘图函数:

import numpy as np
import matplotlib.pyplot as plt

def main():
    data = [np.random.random((2, 3)) for _ in range(5)]
    fig, ax = plt.subplots()
    plot_polygons(data, alpha=0.5, ax=ax)
    plot_verts(data, marker='^', color='black', ax=ax)
    plt.show()


def plot_polygons(data, ax=None, **kwargs):
    if ax is None:
        ax = plt.gca()

    artists = [ax.fill(x, y, **kwargs) for x, y in data]
    return artists

def plot_verts(data, ax=None, **kwargs):
    if ax is None:
        ax = plt.gca()

    artists = [ax.scatter(x, y, **kwargs) for x, y in data]
    return artists

main()

这种方法的优点是您可以隐式使用当前图形和/或自动创建一个。通过做类似的事情ax = plt.gca() if ax is None else ax在绘图函数中,如果您愿意,可以混合使用 pyplot 状态机样式:

def main():
    data = [np.random.random((2, 3)) for _ in range(5)]
    plot_polygons(data, alpha=0.5)
    plot_verts(data, marker='^', color='black')
    plt.show()

或者您可以明确指定Axes实例(通常这是一种更好的方法)。这允许您以不同的方式在特定轴上绘图:

data = [np.random.random((2, 3)) for _ in range(5)]

fig, axes = plt.subplots(nrows=2, sharex=True)

axes[0].set(title='Simple Plot', ylabel='Y-label')
plot_verts(data, marker='o', ax=axes[0])

axes[1].set(title='More complex', xlabel='X-label')
plot_polygons(data, ax=axes[1], alpha=0.5, color='gray')
plot_verts(data, ax=axes[1], color='red', marker='s', s=200)

plt.show()

请注意,我正在返回创建的艺术家,但我尚未在任何示例中使用它们。但是,返回艺术家是个好主意,因为它允许您稍后根据需要修改他们的属性。

例如,让我们整理一个简单的交互式示例,当您单击时它将隐藏多边形。我将重新定义之前的函数,使其成为一个完整的示例,您可以复制粘贴并运行:

import numpy as np
import matplotlib.pyplot as plt

def main():
    data = [np.random.random((2, 3)) for _ in range(5)]
    fig, ax = plt.subplots()
    polygons = plot_polygons(data, alpha=0.5, ax=ax, color='gray')
    verts = plot_verts(data, marker='s', color='red', ax=ax, s=200)

    def on_click(event):
        visible = polygons[0][0].get_visible()
        plt.setp(polygons, visible=not visible)
        plt.setp(verts, color=np.random.random(3))
        plt.draw()
    fig.canvas.mpl_connect('button_press_event', on_click)

    ax.set(title='Click on plot to change')
    plt.show()


def plot_polygons(data, ax=None, **kwargs):
    if ax is None:
        ax = plt.gca()

    artists = [ax.fill(x, y, **kwargs) for x, y in data]
    return artists

def plot_verts(data, ax=None, **kwargs):
    if ax is None:
        ax = plt.gca()

    artists = [ax.scatter(x, y, **kwargs) for x, y in data]
    return artists

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

使用 matplotlib 组合两个独立图的最佳方法是什么? 的相关文章

  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Python 3 中“map”类型的对象没有 len()

    我在使用 Python 3 时遇到问题 我得到了 Python 2 7 代码 目前我正在尝试更新它 我收到错误 类型错误 map 类型的对象没有 len 在这部分 str len seed candidates 在我像这样初始化它之前 se
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject

随机推荐

  • 如何使用共享网址和命令行从 Google Colab 获取“原始”ipynb 文件?

    为 Google Colab 获取的 共享 url 链接到一个包含大量额外 HTML 的文件 因此当您尝试使用 wget 或 curl 下载该文件时 您不会获得有效的 Jupyter ipynb 文件 如何使用 wget 或 curl 等命
  • Numpy 平均函数舍入误差

    我觉得这很奇怪 有人能告诉我这是怎么回事吗 gt gt gt a 1 0 1 gt gt gt np mean a 0 66666666666666663 gt gt gt 2 0 3 0 6666666666666666 输出末尾的 3
  • 哈希或其他对象的内存大小?

    在 Ruby 1 9 3 中获取给定散列 或任何对象 的大小 以字节为单位 的最佳方法是什么 解决方案 查找特定哈希在 Ruby 中使用的字节数 https stackoverflow com questions 3687073 find
  • Javascript HTML5 Canvas 绘制透明圆圈

    我需要一个函数来在画布上绘制几个圆圈 从 center x y 处的 mousedown 开始 然后将鼠标拖动到 deltaX deltaY 从而为每个圆圈创建半径 r 圆圈不能填充 需要透明 以便用户可以清楚地看到圆圈相交的位置 我当前的
  • 分裂b+树中的节点

    我试图弄清楚当节点溢出时到底会发生什么 信息 在我的 b 树中 每个块有 4 个指针和 3 个数据部分 问题 我明白 当出现溢出时 我们会分成 2 个节点 每个节点有 2 个节点 键 并将中间值插入父节点 而不从子节点中删除 与 b 树不同
  • 获取列表列表中的最大值列表

    我有一个List
  • Python 字典包含编码值

    我有一个熊猫数据框oParameterData我使用 Hive ODBC 连接在 Hadoop 上构建了查询 我用它来填充一个名为的 Python 字典oParameter import pyodbc import pandas oConn
  • iOS - 如何在更改视图时停止背景音乐

    如何在改变视图时停止背景音乐 我没有任何线索 如果我按下一个按钮 将我带到一个新的视图 就会有新的背景音乐 但旧的背景音乐 无限循环 仍在继续 请帮忙 还请示例一些代码 这是我的 void viewDidLoad NSString path
  • 使用 PDO 获取插入和更新 ID

    我想得到mysql insert id使用 PDO 到目前为止 我还没有找到一个可以同时用于插入和更新的好例子 有人有一段完整的代码作为示例吗 If you need pdo gt lastInsertId 要返回刚刚更新的行的 id 如果
  • 下一次部署仅在 Amplify 上失败

    我尝试在 AWS Amplify 上部署 Next js 应用程序 但始终失败 构建在本地环境中运行得非常好 我什至成功地在 Vercel 上部署 但它只在放大上失败 我能够通过创建一个来部署 babelrc文件 但我正在寻找保留 SWC
  • 没有为与上下文路径 [/Struts2Test] 关联的名称空间 [/] 和操作名称 [login] 映射的操作

    我是 Struts2 的初学者 我知道这个问题在这里被问了很多次 但我试图解决它并在这里阅读了很多线程 花了 6 个小时 但仍然无法让它工作 确实需要更多建议 这是我的包裹 Struts2Test Struts2Test src tw co
  • TeamCity 提供静态 HTML 页面

    我正在寻找一种使用 TeamCity 提供一些静态 HTML 页面的方法 如果不是绝对必要的话 我不想为此设置 apache 有谁知道访问静态 HTML 内容的简单方法 或 URL 方案 我找到了以下插件 但它只在现有页面的某些位置插入 H
  • 从菜单中隐藏应用程序并在需要时显示

    我想从主菜单隐藏我的应用程序 当用户愿意时 他 她可以看到他们的应用程序 为了隐藏应用程序 我删除了启动器类别 现在应用程序被隐藏 但现在我不明白用户如何启动应用程序 我在某处读到 使用组合键 在 DialerPad 上 可以显示活动的主屏
  • perf stat 为每次运行提供不同数量的指令

    我对以下空程序进行了性能分析 include
  • 如何将 css 类添加到特定的 symfony2 表单选项?

    我可以使用 Javascript 做到这一点 但我想知道是否可以将 css 类添加到特定的 symfony2 表单选择 不是选择字段本身 而是单个选择 例如 我想将不同的 css 样式应用于 选择 内的各个 选项 标签 我只能找到一种方法来
  • 动态加载Extjs模块化应用程序

    我正在使用 Extjs5 开发一个大型客户端应用程序 每个模块上都有非常复杂的视图 我已经在 Extjs 中开发了应用程序 但它们都编译为单个 app js 文件 因此 根据所有应用程序模型中视图的复杂性 我估计应用程序的大小即使在编译后也
  • 使用 JUnit4 进行测试时,Spring @transactional 不会启动事务

    我有以下配置
  • 了解 jQuery 返回对象

    我试图了解 jQuery 在搜索 DOM 元素时如何创建返回对象 我已经浏览了来源 但我不完全确定我理解 并希望这里有人能给我一些见解 从我收集到的阅读源代码来看 当查询 jQuery DOM 时 jQuery 会找到匹配的 DOM 元素
  • 使用文本函数或查找和替换来重命名多列的简单方法

    有没有一种简单的方法可以使用文本函数 例如Text Upper https learn microsoft com en us powerquery m text upper or Text Proper https learn micro
  • 使用 matplotlib 组合两个独立图的最佳方法是什么?

    我不断地问自己这个问题 如何以模块化的方式将不同的绘图与 matplotlib 轻松组合 比方说 我编写了一个显示图形节点位置的函数 同时 我制作了另一个绘制一些多边形的函数 现在 组合输出的正确方法是什么 使节点看起来位于多边形内部 改变