加速 matplotlib 散点图绘制

2024-04-06

我正在尝试制作一个交互式程序,主要使用 matplotlib 来制作相当多的点(10k-100k 左右)的散点图。现在它可以工作,但是更改需要很长时间才能呈现。少量的点还可以,但是一旦数量增加,事情就会很快变得令人沮丧。所以,我正在研究加速分散的方法,但我运气不佳

有明显的做事方式(现在实施的方式) (我意识到绘图会在没有更新的情况下重绘。我不想通过大量随机调用来改变 fps 结果)。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
import time


X = np.random.randn(10000)  #x pos
Y = np.random.randn(10000)  #y pos
C = np.random.random(10000) #will be color
S = (1+np.random.randn(10000)**2)*3 #size

#build the colors from a color map
colors = mpl.cm.jet(C)
#there are easier ways to do static alpha, but this allows 
#per point alpha later on.
colors[:,3] = 0.1

fig, ax = plt.subplots()

fig.show()
background = fig.canvas.copy_from_bbox(ax.bbox)

#this makes the base collection
coll = ax.scatter(X,Y,facecolor=colors, s=S, edgecolor='None',marker='D')

fig.canvas.draw()

sTime = time.time()
for i in range(10):
    print i
    #don't change anything, but redraw the plot
    ax.cla()
    coll = ax.scatter(X,Y,facecolor=colors, s=S, edgecolor='None',marker='D')
    fig.canvas.draw()
print '%2.1f FPS'%( (time.time()-sTime)/10 )

速度达到 0.7 fps

或者,我可以编辑 scatter 返回的集合。为此,我可以更改颜色和位置,但不知道如何更改每个点的大小。我认为看起来像这样

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
import time


X = np.random.randn(10000)  #x pos
Y = np.random.randn(10000)  #y pos
C = np.random.random(10000) #will be color
S = (1+np.random.randn(10000)**2)*3 #size

#build the colors from a color map
colors = mpl.cm.jet(C)
#there are easier ways to do static alpha, but this allows 
#per point alpha later on.
colors[:,3] = 0.1

fig, ax = plt.subplots()

fig.show()
background = fig.canvas.copy_from_bbox(ax.bbox)

#this makes the base collection
coll = ax.scatter(X,Y,facecolor=colors, s=S, edgecolor='None', marker='D')

fig.canvas.draw()

sTime = time.time()
for i in range(10):
    print i
    #don't change anything, but redraw the plot
    coll.set_facecolors(colors)
    coll.set_offsets( np.array([X,Y]).T )
    #for starters lets not change anything!
    fig.canvas.restore_region(background)
    ax.draw_artist(coll)
    fig.canvas.blit(ax.bbox)
print '%2.1f FPS'%( (time.time()-sTime)/10 )

这会导致 0.7 fps 变慢。我想尝试使用 CircleCollection 或 RegularPolygonCollection,因为这可以让我轻松更改大小,而且我不关心更改标记。但是,我无法画画,所以我不知道它们是否会更快。所以,此时我正在寻找想法。


我已经经历过几次尝试加速具有大量点的散点图,并进行了各种尝试:

  • 不同的标记类型
  • 限制颜色
  • 削减数据集
  • 使用热图/网格代替散点图

但这些方法都不起作用。 Matplotlib 在散点图方面的性能不是很好。我唯一的建议是使用不同的绘图库,尽管我个人还没有找到合适的绘图库。我知道这没有多大帮助,但它可能会节省您几个小时徒劳的修补工作。

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

加速 matplotlib 散点图绘制 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • ipython/ pylab/ matplotlib安装和初始化错误

    我在 OS X El Captain 上安装了 matplotlib anaconda ipython 然而 即使在尝试以所有可能的方式设置环境变量之后 我仍无法启动 ipython shell pylab 版本 这是错误 ImportEr
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • 双击选择 PhpStorm 中的空白

    在 Sublime 中 我可以双击两个字符之间的空白 以便仅选择空白 例如在 foo bar 将导致选择 foo bar 然而在 PhpStorm 中它选择整行 是否有一个设置可以切换 以便可以通过双击来选择空白 就像我可以双击变量来选择它
  • MultiAutoCompleteTextView 不显示结果

    我的活动中有以下代码 ParseQuery
  • Android:定时器/延迟替代方案

    我想让一个图像在 60 毫秒内可见 然后不可见 然后我想让另一个图像执行相同的操作 等等 我认为我没有正确使用计时器 因为当我运行该应用程序时 两个图像会同时打开 并且当我按下使用此功能的按钮时 两个图像不会消失 这是一些示例代码 time
  • Ionic / Leaflet - 无法获取 Tiles 404 Not Found(从缓存)

    我被一个非常奇怪的问题所困扰 我在用着leaflet http leafletjs com with 角度传单指令 https github com tombatossals angular leaflet directive 在之前的应用
  • 在 Jetty 7 中将 JSESSIONID cookie 设置为 httpOnly

    我们正在运行 grails 2 0 jetty 7 6 6 并且需要将 JSESSIONID cookie 设置为 httpOnly stackoverflow 上的所有答案似乎都涉及 Servlet 3 0 需要 jetty 8 或 to
  • 正则表达式匹配 3 到 4 位数字

    我正在学习正则表达式 我正在尝试找到这个字符串 day1otlk XXXX gif 其中 4 个 X 是 3 到 4 个随机数字 这就是我到目前为止所拥有的 我接近了吗 qr day1otlk d gif i 您可以指定 3 或 4 位数字
  • Quartz 2D 与 OpenGL ES 学习曲线

    我开发 iPhone 应用程序已有几个月了 我想知道您对 Quartz 与 OpenGL ES 1 x 或 2 0 学习曲线的看法 你可以说出你的观点 我的问题是 我是一名想成为游戏开发者的人 所以先用quartz开发然后再迁移是个好主意吗
  • 如何记录 ActiveResource 使用的 URL?

    Rails ActiveResource 很棒 除了一件事 据我所知 无法查看它在幕后使用的 URL 例如 假设我有一个名为 Issue 的 ActiveResource 用于 myIssues com issues xml 上的 Web
  • 使原始的 Angular 表单控件变脏[重复]

    这个问题在这里已经有答案了 Angular 4 中有一种反应式形式 一些控制应该在某个时刻以编程方式设置 this form formBuilder group foo this form controls foo setValue foo
  • getJSON 和 $.ajax 之间的区别

    从一开始我就想说我知道THIS https stackoverflow com questions 1076013 difference between getjson and ajax in jquery问题与我的标题相同 但该用户提出了
  • 嵌套列表中特定项目的求和

    我有一个数据文件 例如 1 123 something else 2 234 something else 3 500 something else 1 891 something else 2 234 something else 3 5
  • CLDC 1.0 / MIDP 2.0 应用中的三角学

    如何在 CLDC 1 0 MIDP 2 0 应用程序中使用三角函数 我需要标准数学库中的 sin cos tan asin acos atan atan2 函数 Thanks 蚊子知道 http forums sun com thread
  • 在 IE11 中按计算机名称访问站点时显示“对象不支持属性或方法‘querySelector’”

    我在防火墙内的 Windows Server 2012 R2 主机上将 Angularjs 站点部署到 IIS 当我 RDP 进入服务器并从那里导航到 http localhost Foo 在 IE11 中 一切都按照人们的预期运行 我的页
  • 当我尝试运行 npx react-native run-android 时,任务:app:mergeDebugAssets 失败

    我正在使用 vscode 和物理 Android 设备在 React Native 上开发 Android 应用程序 在尝试使用 npx React Native Run Android 进行构建时 它不断显示以下错误 Task app m
  • 渠道有什么用?

    在查看一些 Go 代码时 我发现了以下内容 ch make chan int 我在在线教程中查找了 Go Channels 的工作原理 https tour golang org concurrency 2 https tour golan
  • jquery回调

    我需要能够在准备好后对函数的执行进行回调 jQuery document ready function execute function 1 only when finish do function 2 这样做的好方法是什么 加载文档后执行
  • Oracle InvalidOperationException - 尝试从表中选择时

    我有一个参数表 其中有一个参数来说明我的程序是否应该运行 我试图获取该值来检查函数 这是函数 private static bool shouldRun OracleCommand c conn CreateCommand c Comman
  • 如何在单个查询中使用不同参数执行多个联接

    我有两个表 问题 question id 和question exclusion question type question sub type question id 如果我指定 Question type 和 Question sub
  • 如何以编程方式调用视图控制器?

    我已经查看了我能找到的所有关于此问题的教程 但仍然没有答案 我需要从代码中调用另一个视图 我在用UIStoryboards 我通过控制拖动多次改变了视图UIButtons 但现在它必须来自代码 如果这是用户第一次打开应用程序 我尝试从主菜单
  • 加速 matplotlib 散点图绘制

    我正在尝试制作一个交互式程序 主要使用 matplotlib 来制作相当多的点 10k 100k 左右 的散点图 现在它可以工作 但是更改需要很长时间才能呈现 少量的点还可以 但是一旦数量增加 事情就会很快变得令人沮丧 所以 我正在研究加速