Skip to content

I'm having problems with the ax parameters of the rlocus function #623

Description

@jolenscki

I was trying today to plot the root locus of a transfer function, but wanted to pass a specific axes object to it, so I tried to use the ax parameter of the rlocus function:

from control import *
import matplotlib.pyplot as plt

s = tf([1, 0], 1)
G = 1/(s*(s+1))

fig, ax = plt.subplots(dpi=200)
rlocus(G, ax=ax)

But when doing this, the following error was raised:

---------------------------------------------------------------------------
UnboundLocalError                         Traceback (most recent call last)
<ipython-input-1-80498c4b1a54> in <module>
      6 
      7 fig, ax = plt.subplots(dpi=200)
----> 8 rlocus(G, ax=ax)

~\anaconda3\lib\site-packages\control\rlocus.py in root_locus(sys, kvect, xlim, ylim, plotstr, plot, print_gain, grid, ax, **kwargs)
    173 
    174         if print_gain and not sisotool:
--> 175             fig.canvas.mpl_connect(
    176                 'button_release_event',
    177                 partial(_RLClickDispatcher, sys=sys, fig=fig,

UnboundLocalError: local variable 'fig' referenced before assignment

Control version: 0.9.0

Activity

  1. sawyerbfuller commented on May 22, 2021

    @sawyerbfuller
    Contributor

    Looks like you caught a bug, thanks! I think when we implemented this we had what you intended in mind but didn’t get around to testing it.

  2. billtubbs commented on Aug 9, 2021

    @billtubbs
    Contributor

    It's not too difficult to fix. I think we just need to unindent lines 171 and 172 by one tab:

    if ax is None:
    ax = plt.gca()
    fig = ax.figure
    ax.set_title('Root Locus')

  3. billtubbs commented on Aug 9, 2021

    @billtubbs
    Contributor

    I'm happy to implement this immediate fix (and #632 at the same time) and maybe add some unit tests, including for other plot functions where applicable. If I recall correctly, I was trying to do this a while back and the problem is that some plot funcs need to generate their own axis (e.g. radial plots) and some generate a figure containing more than one axis.

  4. bnavigator commented on Aug 9, 2021

    @bnavigator
    Contributor

    If you manage to also fix #634 while you are at it, it would be a blast. Not sure if it is worth to be done before/without implementing the new plotting paradigm, proposed by you in #65 (comment)

  5. billtubbs commented on Aug 9, 2021

    @billtubbs
    Contributor

    I'll have a look at #634. But I'm waiting for further input on the new plotting paradigm. That will require more thinking and discussion and probably take a while to figure out a way forward. There might be better ways to do it. I'm happy to try fixing the immediate bugs on the existing functions when I next get the chance.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions