[Deepin - Pycharm调试记录] Matplot3D动态画图报错问题

Deepin - Pycharm调试记录 - Matplot3D动态画图报错问题

写在开头的话

应该不会有人傻到看这个wiki吧,我花了1个小时才发现问题,是我自己方法调错了。


这个wiki不会细致的教大家如何使用matplotlib进行动态画图,或者动态画图的几种办法,记录一下花了一个小时左右调试出动态画图bug,希望如果有人遇到这个问题可以借鉴一下。和上一篇文章Pyinstaller索引系统库问题一样,最终的思路还是阅读源码。前面看github各种开源代码和matplotlib的文档浪费了太多时间不如直接阅读源码效率高。

现象

我有一个画图函数,放置在3D画布上进行构图,初始化函数如下:这是一个3D构图,
其中,
self.xedges 是x坐标
self.yedges是y坐标
self.hist是z坐标
self.color_list是颜色图

class MyFigure(FigureCanvas):def __init__(self, width=5, height=4, dpi=100):self.fig = Figure(figsize=(width, height), dpi=dpi)super(MyFigure, self).__init__(self.fig)self.axes = self.fig.add_subplot(111, projection='3d')# 设置x轴取值self.xedges = np.array([[10, 20], [10, 20], [10, 20], [10, 20],[20, 30], [20, 30], [20, 30], [20, 30],[30, 40], [30, 40], [30, 40], [30, 40],[40, 50], [40, 50], [40, 50], [40, 50]])# 设置y轴取值self.yedges = np.array([[10, 20], [20, 30], [30, 40], [40, 50],[10, 20], [20, 30], [30, 40], [40, 50],[10, 20], [20, 30], [30, 40], [40, 50],[10, 20], [20, 30], [30, 40], [40, 50],[10, 20], [20, 30], [30, 40], [40, 50]])# 设置X,Y对应点的值。即原始数据。self.hist = np.array([[3.0], [0.0], [8.0], [4.0],[2.0], [4.0], [5.0], [7.0],[9.0], [2.0], [6.0], [3.0],[0.0], [3.0], [1.0], [0.0]])self.color_list = ['skyblue', 'lightgreen', 'bisque', 'gold','lightgreen', 'bisque', 'gold', 'lightpink','bisque', 'gold', 'lightpink', 'plum','gold', 'lightpink', 'plum', 'lightgray']

实际绘图函数在这里,是一个for循环,原来画2D图时候,直接调用draw()方法就可以完成动态图绘制。但是现在调用时候,报错。

    def plot_city_line(self):for i in range(len(self.xedges)):# 设置作图点的坐标xpos, ypos = np.meshgrid(self.xedges[i][:-1] - 2.5, self.yedges[i][:-1] - 2.5)xpos = xpos.flatten('F')ypos = ypos.flatten('F')zpos = np.zeros_like(xpos)# 设置柱形图大小dx = 5 * np.ones_like(zpos)dy = dx.copy()dz = self.hist[i].flatten()# 设置坐标轴标签self.axes.set_xlabel('side')self.axes.set_ylabel('front')self.axes.set_zlabel('height')self.axes.bar3d(xpos, ypos, zpos, dx, dy, dz, color=self.color_list[i], zsort='average')self.axes.draw()

解决办法

重新调试的时候发现,draw() 方法是针对figure来说的,而不是针对于坐标轴来说的,因此,使用

self.draw()

或者

self.figure.canvas.draw()

都可以完成画图

源码

^ _ ^,是我自己代码一开始写错了纠结了半天,好坑阿!
参考代码路径

./venv/Lib/site-packages/mpl_toolkits/tests/test_mplot3d.py

第666行左右的函数

def test_patch_modification():fig = plt.figure()ax = fig.add_subplot(projection="3d")circle = Circle((0, 0))ax.add_patch(circle)art3d.patch_2d_to_3d(circle)circle.set_facecolor((1.0, 0.0, 0.0, 1))assert mcolors.same_color(circle.get_facecolor(), (1, 0, 0, 1))fig.canvas.draw()assert mcolors.same_color(circle.get_facecolor(), (1, 0, 0, 1))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言基础】C语言异常捕获机制 - setjmp

C语言异常捕获机制 - setjmp 快速入门 想快速入门该模块请访问:介绍,数据接口,示例代码 介绍 C语言没有C或Java的异常捕获机制,但可以通过setjmp/longjmp实现类似的效果: 使用setjmp保存当前执行环境到jmp_buf&am…

【C语言基础】C语言异常捕获机制 - assert

C语言异常捕获机制 - assert 快速入门 想快速入门该模块请访问:介绍,数据接口,示例代码 介绍 通常一个良好的代码功能运行环境都有功能运行前检查和运行后检查两个方面。C语言中提供了assert机制来做这件事情 assert 的作用是…

【c语言数据结构】二叉树

c语言数据结构完全二叉树 快速开始 直接参考示例代码即可 介绍 概念 二叉树(Binary tree)是树形结构的一个重要类型。 许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树, 二叉树的存…

git 指令全集

git 指令全集 指令集参考这里,后续会继续整理 https://www.runoob.com/git/git-tutorial.html 基本使用流程 场景1:建立新仓 首先在本地新建一个仓 ~$ mkdir git_workspace ~$ git init与远程仓建立连接 # 查看所有的远端分支 -$ git rem…

UTHash使用教程

UTHash使用教程 快速入门 想快速入门该模块请访问:介绍,数据接口,示例代码 介绍 Hash :散列,通过关于键值(key)的函数,将数据映射到内存存储中一个位置来访问。这个过程叫做Hash,这个映射函…

【C语言基础】gdb调试工具的使用

gdb调试教程 快速入门 要想快速入门gdb调试,可以直接翻阅基本案例:采内存 介绍 GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c程序员,gdb是必不可少的工具 …

C/C++队列与循环队列

C/C数据结构 - 队列 循环队列 快速入门 介绍 1. 队列的定义 队列是一种线性存储结构,每次对队列的增删操作如下 增:在队列尾部添加元素 删(取出):在队列头部删除元素 这种数据存储方式遵循“先进先出”&#xff0…

PyQt特殊对话框介绍

PyQt特殊对话框 对话框基类:QDialog 对话框基本用法: 模态窗口: 当窗口设置为模态窗口时,不能对其父级别的窗口进行操作。QTdesigner里有控件可以勾选Func: QtWidgets.Dialog.setModal(True) [ True | False ] 窗口执行 exec&am…

PyQt5 让窗口在桌面居中的办法

屏幕居中核心函数 在我们开发的UI类中定义一个center方法,(方法名自定,内容如下)。其中QDesktopWideget方法在Qtwidgets头文件中。 然后在 __init__()中调用该 self.center()方法即可。 # 屏幕居中def center(self):# 获取窗口大…

PyQt5 QLineEdit输入密码

单行编辑器 QLineEdit 输入密码 单行编辑器直接继承于QWidget 常用方法: 设置显示模式:在设置密码栏常会使用这种模式 方法QLineEdit.setEchoMode 用法 假设你有一个QLineEdit()组件 self.UserpswdEdit QLineEdit()则你可以使用下面三种方式定义输…

Arduino 软件开发(一): GPIO读写

Arduino 软件开发(一) 目录 核心运行函数, 基础语法,数字控制,模拟控制 核心运行函数 void setup() 当Arduino程序开始运行时会调用setup()函数。通常setup()函数完成初始化一些变量、配置引脚状态及初始化调用的库…

JavaScript学习笔记:类与导包实例

NodeJS类与导包 在工程上,一个文件就是一个独立的模块,仅包含一个类。我们可以称之为类文件。因此当我们要使用这个模块的时候,我们会将这个类文件作为一个包导入到调用的文件里。方法如下: 0. 目录结构如下 - src|__ main.js|…

JavaScript学习笔记:常量,枚举,宏定义

NodeJS常量(fake:宏定义) 因为之前C/C代码开发习惯了,会用到一些宏定义来替换一些表意不明的数字(就是含义不清的数字)。而JS没有这种宏定义。上网找到一个链接作为参考:https://www.itranslat…

JavaScript学习笔记:函数与箭头函数

NodeJS函数 由于js是弱语言,因此,函数的入参和出参可以为任意形式而不用指定类型。当然也没有办法使用冒号的形式进行参数类型注释。但是typescript可以使用冒号形式进行参数类型注释。 1. 普通的函数定义 不带参数形式printHello带参数形式plus使用re…

Python学习笔记(1):用户输入,终端输入

#用户输入,操作 print("python 用户输入操作")# input(提示字符串),函数阻塞程序,并提醒用户输入字符串 instr input("please input the string: ") print("input >> " instr)# 将输入的字符串转化成整…

Python学习笔记(2):生成器

介绍 我们可以通过列表生成式简单直接地创建一个列表,但是受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,而且如果我们仅仅需要访问前面几个元素,那后面…

Python学习笔记(3):zipfile解压库

简介 python自带zipfile解压库,导入方式如下 import zipfile批量解压 先尝试无密码解压,如果失败,就输入密码。但是zipfile解压大文件速度很慢。 path rL:/resource/zipPackage passwd b123456 def compressFromZip():for temp_name in…

数字万用表使用方法

数字万用表使用方法 简介:数字万用表相对来说,属于比较简单的测量仪器。本篇,作者就教大家数字万用表的正确使用方法。从数字万用表的电压、电阻、电流、二极管、三极管、MOS场效应管的测量等测量方法开始,让你更好的掌握万用表测…

Python学习笔记(4):Python如何设置类似C语言静态函数

介绍 模块封装时候,希望有一些函数不被外部直接调用。C语言通常采用static int function()形式以及头文件形式作为标识。而python不存在头文件,但可以通过修饰符staticmethod进行代替。 staticmethod def your_function():# 你的代码print("your …

c++ 字符串相等比较

介绍 在C 中比较字符串的技术 (Techniques to Compare Strings in C) Strings in C can be compared using either of the following techniques: 可以使用以下两种技术之一来比较C 中的字符串: String strcmp() function 字符串strcmp()函…