控件.matplotlib.pzmap不显示零

2024-09-29 06:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

制作一个具有一个零极点和两个极点的简单传递函数,然后绘制其零极点图:

import control
import matplotlib.pyplot as plt
tfx = control.tf([1,1],[1,1,1])
control.matlab.pzmap(tfx)
plt.show()

结果:Python显示一个有两个极点但没有零的图(python3.6)。 按照以下两个小修改重新执行上述操作:

^{pr2}$

结果:Python显示一个带有两个极点和一个零的图。 我的诊断:matplotlib默认打印设置不显示圆标记“o”。 我的问题:我想使用matplotlib的默认绘图设置(因为它很漂亮)。我不想使用“经典”设置。如何更改默认设置以显示圆形标记?以下是我尝试过的:

mpl.rcParams['patch.force_edgecolor'] = True
mpl.rcParams['patch.edgecolor'] = 'k'
mpl.rcParams['boxplot.flierprops.markeredgecolor'] = 'k'

但这并不能改变结果。有什么想法吗?在

第二个稍微相关的问题:根据document on control module,控件.pzmap(tfx)而不是控件.matlab.pzmap(tfx)应绘制零极点图。但是,这将引发“module is not callable”(模块不可调用)错误。奇怪。。。在


Tags: 标记importmatplotlib绘制pltcontrol控件mpl
1条回答
网友
1楼 · 发布于 2024-09-29 06:27:48

pzmap.py的第81行中,您发现

   if len(zeros) > 0:
        plt.scatter(real(zeros), imag(zeros), s=50, marker='o',
                    facecolors='none')

在这里,facecolor被硬编码为'none'。因此,外部更改rcParams没有帮助。相反,从该行中删除facecolors参数,使其看起来像

^{pr2}$

相关问题 更多 >