如何解决使用pyplot创建自定义绘图功能
我想定义一个函数,接受输入ax
并在其上绘制数据。
我的快速虚拟示例,正在研究spyder 4(后端:PyQT5):
from matplotlib import pyplot as plt
def func(L,ax):
L_modified = [x+k for k,x in enumerate(L)]
ax.plot(L_modified)
return L_modified
f,ax = plt.subplots(1,1)
L = [1,2,3,4,5]
data = func(L,ax)
这很好用,data
是一个包含修改后的输入的列表;并且情节正确显示。在不同的发布/说明中,我看到绘制绘图的函数通常返回ax
,这不是我的情况。是否需要返回ax
才能使每种IDE都具有这种功能?是因为我正在使用spyder才起作用吗?
对于某些人来说,我的问题语法似乎有点太宽泛,下面是一个大的多合一方法:创建自定义绘图功能的最佳方法是什么?
编辑:我在需要时创建图形的示例
def butter_lowpass_filter(self,cutoff,order=5,plot=False,ax=None,**plt_kwargs):
nyq = 0.5 * self.fs
normal_cutoff = cutoff / nyq
b,a = butter(order,normal_cutoff,btype='low',analog=False)
data_filtered = lfilter(b,a,self.data)
if plot is True:
if ax is None:
f,ax = plt.subplots(2,1,sharex=True,sharey=True,figsize=(15,10))
f.subplots_adjust(wspace=0,hspace=0.15)
ax[0].plot(self.data,color='blue')
ax[0].plot(data_filtered,color='teal')
ax[0].set_title("Signal + Fitlered signal")
ax[1].plot(data_filtered,color='teal')
ax[1].set_title("Filtered signal with a Butterworth filter")
else:
ax.plot(data_filtered,**plt_kwargs)
ax.set_title("Filtered signal with a Butterworth filter")
return data_filtered
解决方法
我不确定我是否了解您的要求。我想您想要一个修改图形的函数。该代码有两个版本,第二个版本稍加注释,第一个版本有所改进。
-
我不使用spyder(仅使用终端),也没有图形化的代码结果。
-
通常,如果您使用
Stock index has been rebuilt successfully in 00:00:00
,则完全定义图形窗口(图中),而不要让python不在幕后,这是一个好习惯。如果程序变得复杂,则需要定义。
- 图的名称很重要
- fig.add_subplot,以防您使用多个坐标系
- 尝试根据您的图形对象固定轴的边界
- 我从您的例子开始写下了一个最小的例子。它基于多次调用的函数。因此图像在演变。现在,您得到的是一些基本的动画。但是,即使如此,您仍然可以轻松看到许多缺陷:
- 轴不稳定
- 图在堆积。
功能需要改进;因为我不知道我是否朝正确的方向前进,所以我暂时停在这里。
- 该函数为什么仍返回该列表?
第一版
matplotlib
代码的第二,改进和注释版本。 假设我也在使用该函数的输出。
import matplotlib as mpl
from matplotlib import pyplot as plt
import time
def func(L,fig):
L_modified = [x+k for k,x in enumerate(L)]
ax = fig.axes[0]
ax.plot(L_modified)
return L_modified
plt.ion()
delta_t = .5
f = plt.figure(figsize=(8,6))
ax = f.add_subplot(1,1,aspect='equal')
L = [1,2,3,4,5]
data = func(L,f)
plt.pause(delta_t)
for j in range(len(L)):
L[j] = L[j]-3*(j+1)
data = func(L,f)
plt.pause(delta_t)
f.show()
plt.show(block=True)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。