sciapp / python-gr

Python wrapper for the GR framework
https://gr-framework.org
Other
30 stars 8 forks source link

Using ylim() with subplots does not properly redraw #7

Open Modiug opened 5 years ago

Modiug commented 5 years ago

Versions: Runtime: 0.41.0 Python: 1.11.0

The following script illustrates the issue. You will see double drawings in the second subplot.

import gr
from gr.pygr import mlab

import numpy as np

x = np.linspace(-4, 4, 100)

mlab.figure()

mlab.subplot(2,1,1)
mlab.plot(x, np.sin(x))
mlab.ylim(-2, 2)

mlab.subplot(2,1,2)
mlab.plot(x, np.cos(x) + 1)
mlab.ylim(-4, 4)

The example is using the Python wrapper, but I guess this is more an issue of the underlying framework.

Well, by looking at the Python wrapper code I got aware that I could also pass ylim=(...) to the plot command directly. That solves my issue, so no high urgency on this one.

Regards Guido

FlorianRhiem commented 5 years ago

This is an issue with the subplot implementation in the Python-Wrapper. The subplot logic works by not clearing the workstation except for the first subplot. As methods like ylim cause a redraw of the current (sub)plot, this can lead to the problem you are describing.

The subplot logic needs to be reworked in general, due to other problems as well.

Modiug commented 5 years ago

Indeed, I see more issues when trying to use things like hold(), ylabel() and legend(). OK, best to stay away from subplot() for now.

Background: I wanted to use some live plotting of measured signals in a GUI application. Matplotlib is rather slow, therefore GR. I was using the mlab wrapper for convenience. I should better use the GR API directly.