我想繪製一個字節的按位循環移位的值。我想要一個滑塊讓我改變原來的輸入值。我在matplotlib站點上使用滑塊示例作爲參考,但由於某些原因,即使我在運行腳本時傳遞0-255作爲滑塊範圍,範圍始終爲0-7。我猜測,滑塊被鎖定到我的最大數量的x值,但我不知道如何。我如何讓滑塊讓我選擇完整的0-255範圍?爲什麼matplotlib的Slider只允許0-7的範圍?
此外,儘管最小/最大我給了滑塊它插入一些填充在前面低於0,並隨機在我的滑塊中間繪製一條垂線。我如何擺脫它? (也有什麼它的目的不是明顯對我?)滑塊
圖片僅供上升到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()
doh!完全忘了我是如何混合OOP和狀態機界面的。 –
我知道我可以調用軸來創建一個軸對象,因爲我爲滑塊做了這個操作,但是如何將它添加到繪圖?我已經嘗試了幾個變體,在plot對象上調用set_axes或者將它作爲axes關鍵字傳遞給構造函數,並且它們都使我的繪圖消失... –
@JosephGarvin請參閱編輯 – tacaswell