I want to plot data where x axis is long. If I plot the whole x axis then the plot shrinks and it is almost unreadable. I’ve found this answer on SO which points to following scipy/matplotlib code. But When I try to run the mentioned code I get following error:
Traceback (most recent call last):
File "scrollingPlot.py", line 88, in <module>
app = MyApp()
File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk2/wx/_core.py", line 8628, in __init__
self._BootstrapApp()
File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk2/wx/_core.py", line 8196, in _BootstrapApp
return _core_.PyApp__BootstrapApp(*args, **kwargs)
File "scrollingPlot.py", line 82, in OnInit
self.frame = MyFrame(parent=None,id=-1)
File "scrollingPlot.py", line 21, in __init__
self.scroll_range)
File "/usr/lib/python2.7/dist-packages/wx-3.0-gtk2/wx/_core.py", line 11226, in SetScrollbar
return _core_.Window_SetScrollbar(*args, **kwargs)
wx._core.PyAssertionError: C++ assertion "sb" failed at ../src/gtk/window.cpp(4754) in SetScrollbar(): this window is not scrollable
PS: Other solutions are also welcomed (preferably python, R, or something simple and multi platform)
PPS: I’ve opened the issue for mentioned error
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Have you considered using matplotlib slider widgets?
Here is a little code just to show as example
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)
t = np.arange(0.0, 100.0, 0.1)
s = np.sin(2*np.pi*t)
l, = plt.plot(t,s)
plt.axis([0, 10, -1, 1])
axcolor = 'lightgoldenrodyellow'
axpos = plt.axes([0.2, 0.1, 0.65, 0.03], facecolor=axcolor)
spos = Slider(axpos, 'Pos', 0.1, 90.0)
def update(val):
pos = spos.val
ax.axis([pos,pos+10,-1,1])
fig.canvas.draw_idle()
spos.on_changed(update)
plt.show()
Method 2
In R this answer could help you. It will save the plot as a separate png, but you can change the format type with a different command. The relevant code from that answer is reproduced:
png("wide.png", width = 1e5, height = 500)
plot((sin(1:10000/100)+rnorm(10000)/5),type='l')
dev.off()
#bmp("wide.bmp", width = 1e5, height = 500)
#plot((sin(1:10000/100)+rnorm(10000)/5),type='l')
#dev.off()
#note that the png has a size of 396 KB, while the bmp has 48,830 KB.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0