Ваши наблюдения над наименованием Tensor
абсолютно правильны: имя Tensor
является конкатенацией
:
) и Поэтому тензор с именем "foo:2"
является выходом op с именем "foo"
в позиции 2 (с индексами, начинающимися с нуля).
Именование объектов tf.Variable
немного странно. Каждый tf.Variable
содержит объект изменчивого тензора , который содержит состояние переменной (и несколько других тензоров). A "Variable"
op (который имеет имя "variable_name"
в вашем примере) «производит» этот изменяемый тензор каждый раз, когда он запускается как его 0-й выход, поэтому имя изменяемого тензора "variable_name:0"
.
Поскольку a tf.Variable
в основном неотличим от tf.Tensor
& mdash; в нем его можно использовать в тех же местах: mdash; мы приняли решение сделать имена переменных похожими на имена тензоров, поэтому свойство Variable.name
возвращает имя изменяемый тензор. (Это контрастирует с объектами tf.QueueBase
и tf.ReaderBase
, которые не используются непосредственно в качестве тензоров (вместо этого вы должны вызывать методы на них для создания ops, которые работают на их состоянии), поэтому они не имеют тензорного имени.)
Возможно, возможно, более элегантный способ, но вы всегда можете сами отслеживать состояния каждого из этих флажков. в dict
. Функция, которую вы укажете с помощью on_clicked()
, получит строку метки активного флажка в качестве ее второго аргумента, которую вы затем можете использовать для обновления состояния соответствующим образом:
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
class Example:
def onColor(self,label):
self.cstates[label] = not self.cstates[label]
print 'un'*(not self.cstates[label]) + 'checked %s' %label
self.updateChart()
def onMeasurement(self,label):
self.mstates[label] = not self.mstates[label]
print 'un'*(not self.mstates[label]) + 'checked %s' %label
self.updateChart()
def updateChart(self, event=None):
"""do something here using self.cstates and self.mstates?"""
pass
def __init__(self):
colourax = plt.axes([0.5, 0.4, 0.09, 0.2])
measurementax = plt.axes([0.5, 0.6, 0.09, 0.2])
clabels, cvals = ('Red', 'Green', 'Blue'), (False,)*3
mlabels, mvals = ('1', '2', '3'), (False,)*3
self.cstates = dict(zip(clabels,cvals))
self.mstates = dict(zip(mlabels,mvals))
self.colours = CheckButtons(colourax, clabels, cvals)
self.colours.on_clicked(self.onColor)
self.measurements = CheckButtons(measurementax, mlabels, mvals)
self.measurements.on_clicked(self.onMeasurement)
def run(self):
plt.show()
ex = Example()
ex.run()
Не самый красивый, но он работает!
Я знаю, что это немного неудобно, но вы можете проверить видимость перекрестных линий в полях.
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
colourax = plt.axes([0.5, 0.4, 0.09, 0.2])
colours = CheckButtons(colourax, ('Red', 'Green', 'Blue'), (False, False, False))
isRedChecked = colours.lines[0][0].get_visible()
isGreenChecked = colours.lines[1][0].get_visible()
isBlueChecked = colours.lines[2][0].get_visible()
Текущая версия разработки (по состоянию на июль 2017 года) имеет встроенный метод
CheckButtons.get_status()
. Это можно использовать для запроса текущего состояния флажков. Он должен быть выпущен в стабильной версии довольно скоро. ( Источник здесь )
До тех пор вы можете эмулировать это поведение, используя свой собственный метод get_status
, как показано ниже. Он использует тот же механизм, что и метод get_status()
из версии разработки, который также очень близок к тому, что предлагает ответ @Gruby (смотря на видимость строк).
import matplotlib.pyplot as plt
from matplotlib.widgets import CheckButtons
class Example:
def updateChart(self, event):
colour = self.get_status(self.colours)
measurement = self.get_status(self.measurements)
print measurement, colour
def get_status(self, cb):
return [l1.get_visible() for (l1, l2) in cb.lines]
def __init__(self):
colourax = plt.axes([0.5, 0.4, 0.09, 0.2])
measurementax = plt.axes([0.5, 0.6, 0.09, 0.2])
self.colours = CheckButtons(colourax, ('Red', 'Green', 'Blue'), (False, False, False))
self.measurements = CheckButtons(measurementax, ('1', '2', '3'), (False, False, False))
self.colours.on_clicked(self.updateChart)
self.measurements.on_clicked(self.updateChart)
def run(self):
plt.show()
ex = Example()
ex.run()