我想上绘制1个字节按位循环移位的值。 我想有一个滑块让我改变原来的输入值。 我使用的matplotlib网站参考滑块例子,但即使我通过在0-255作为我的滑块范围,当我运行我的脚本某种原因,范围总是0-7。 我猜测,不知何故滑块被锁到我的x值的最大数目,但我看不出如何。 如何获得滑块来让我挑满0-255范围是多少?
此外,尽管最小值/最大值我给滑块它插入一些填充在前面低于0会,并随机在我的滑块的中间画一个verticle线。 我该如何摆脱它? (也又是什么呢?目的不是明显对我)
滑块的图片只会高达7:
码:
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from numpy import uint8
from numpy import uint16
from numpy import uint32
from numpy import uint64
def sizeof(x):
return [uint8, uint16, uint32, uint64].index(x) + 1
def rot(x, i):
return type(x)((x >> i) | (x << (sizeof(type(x))*8 - i)))
def plotShifts(x):
origType = type(x)
maxval = type(x)(-1)
numrots = sizeof(type(x)) * 8
vals = [rot(x, i) for i in range(numrots)]
print vals
l, = plt.plot(range(numrots), vals, 'ro')
axcolor = 'lightgoldenrodyellow'
inputax = plt.axes([0.15, 0.05, 0.65, 0.03], axisbg=axcolor)
inputsl = Slider(inputax, 'Input', 0, maxval, valinit=0, valfmt="%d")
def update(x):
vals = [rot(origType(x), i) for i in range(numrots)]
l.set_ydata(vals)
plt.draw()
inputsl.on_changed(update)
plt.axis([-0.5, numrots-1 + 0.5, -2, maxval + 2])
plotShifts(uint8(1))
plt.show()
问题是在最后一行plt.axis([-0.5, numrots-1 + 0.5, -2, maxval + 2])
其作用于保持所述滑块,而不是在与所述数据的轴的轴。
我会建议使用OO接口matplotlib
而不是pyplot
接口编程东西。 该pyplot
界面良好互动的东西,但它隐藏状态的一个很好的协议。
您还需要向参考返回slider
对象,由于方式回调工作。
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from numpy import uint8
from numpy import uint16
from numpy import uint32
from numpy import uint64
def sizeof(x):
return 2 ** [uint8, uint16, uint32, uint64].index(x)
def rot(x, i):
return type(x)((x >> i) | (x << (sizeof(type(x))*8 - i)))
def plotShifts(x):
fig = plt.figure() # make a new figure
ax = fig.add_axes([0.15, 0.2, 0.65, 0.7]) # add data axes
origType = type(x)
maxval = type(x)(-1)
numrots = sizeof(type(x)) * 8
vals = [rot(x, type(x)(i)) for i in range(numrots)]
print vals
print maxval
l, = ax.plot(range(numrots), vals, 'ro') # plot to data axes
axcolor = 'lightgoldenrodyellow'
inputax = fig.add_axes([0.15, 0.05, 0.65, 0.03], axisbg=axcolor)
inputsl = Slider(inputax, 'Input', 0, maxval, valinit=0, valfmt="%d")
def update(x):
vals = [rot(origType(x), origType(i)) for i in range(numrots)]
l.set_ydata(vals)
plt.draw()
inputsl.on_changed(update)
ax.set_ylim([-2,maxval +2]) # set ylim on data axes
ax.set_xlim([-.5,numrots-1+.05]) # set xlim on data axes
return inputsl
sldr = plotShifts(uint8(1))
plt.show()
很可能是因为MAXVAL = 7在这条线
inputsl = Slider(inputax, 'Input', 0, maxval, valinit=0, valfmt="%d")