Plotting data with scrollable x-axis (time / horizontal) on Linux
I want to plot data where the x-axis is long. If I draw the whole x-axis then the plot shrinks and it is almost unreadable. I found this answer on SO which points to the following scipy / matplotlib code, But when I try to run the said code, I get the 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 welcome too (preferably python, R, or something simple and multi-platform)
PPS: I opened an issue for the specified error
+3
source to share
2 answers
Are you using matplotlib slider widgets ?
Here's a little code that you can just show as an 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], axisbg=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()
+8
source to share
In R
this answer can help you. It will save the graph as a separate png, but you can change the format type with another command. The relevant code from this 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.
0
source to share