Возможно, самый простой способ - создать соответствующее количество экземпляров Patch:
import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randint(8, size=(100,100))
cmap = plt.cm.get_cmap('PiYG', 8)
plt.pcolormesh(data,cmap = cmap,alpha = 0.75)
# Set borders in the interval [0, 1]
bound = np.linspace(0, 1, 9)
# Preparing borders for the legend
bound_prep = np.round(bound * 7, 2)
# Creating 8 Patch instances
plt.legend([mpatches.Patch(color=cmap(b)) for b in bound[:-1]],
['{} - {}'.format(bound_prep[i], bound_prep[i+1] - 0.01) for i in range(8)])
Некоторые люди утверждали бы, что это столь интуитивно, как это добирается.
Вот снимок экрана прототипа, который я сделал для приложения Linux несколько лет назад. Вы могли нажать +/-значки, чтобы добавить строки к группе и нажать, "добавьте новый...", и "удаляют в последний раз..." кнопки для удаления самой нижней группы.
Выше каждой группы были несколько menubuttons, которые имели выбор "И объекты, которые соответствуют..." / "ИЛИ объекты, которые соответствуют..." (за исключением первой группы, которая варьировалась немного), и "ЛЮБОЕ из следующих" / "ВСЕ следующие". Каждая строка была осведомлена о типе, поэтому при выборе строки для переменной, условия были бы "", "НЕ", "НАЧИНАЕТСЯ" и так далее. Для целых чисел Вы добрались бы "", "БОЛЬШЕ, ЧЕМ", и т.д., и для дат "НА", "ПРЕЖДЕ", "НА ИЛИ ПРЕЖДЕ" и так далее.
Где Вы видите слово "или" перед второй и третьей строкой первой группы, которая была бы "или" если "КАКОЕ-ЛИБО следующее" было выбрано, и "и" если "ВСЕ следующее": был выбран, чтобы укрепить выбор и помочь "считать" диалоговое окно.
Это не позволило бы Вам сделать любой мыслимый запрос, но я думаю, что это покрыло приблизительно 90% того, что средний пользователь захочет сделать и выполнил в нем, что я думал, был довольно применимый путь.
(источник: clearlight.com)
TheBat! имеет лучший интерфейс, для которого я лично совершил нападки на. (Используемый для почтовых правил вида.)
Это идет:
Папка Source не является одним из \\Google\Inbox
И
Подчиненные концы с "новым комментарием"
ИЛИ Предмет соответствует "некоторой строке"
Принимая.NET, я пошел бы с DataGridView, чтобы сохранить каждое условие и присвоить каждому идентификатор, поскольку это создается, и имейте текстовое поле, которое позволяет Вам, вводят особые условия запроса.
Вы могли затем, после того как все условия записаны, допускают объединение 2 за один раз или с И или с ИЛИ и затем отображение получающегося запроса для проверки
Condition1
Condition2
Condition3
Condition4
Condition5
в Вашем случае, после того как Вы добавляете каждого к своему набору данных и заполняете DataGridView, Вы затем сделали бы (я воображаю форму с 3 выпадающими полями, лучшим и понимаю, каждый позволяет для условий или "составных объектов", и выпадающая середина И/ИЛИ только:
Condition1 И Condition2 = "Compound1"
Condition1 И Condition5 = "Compound2"
Compound1 ИЛИ Compound2 = "Compound3"
Compound3 И Condition4 = "Compound4"
и compound4 является Вашим заключительным запросом
иметь смысл?
Если бы это достаточно важно для пребывания в течение большого количества времени на, я рассмотрел бы использование схем Венна. Визуализация представит наборы результатов, а не условия запроса. Таким образом для демонстрации И Вы показали бы два круга, представляющие результаты, и выделили бы перекрытие между ними (пересечение).
Для демонстрации ИЛИ Вы показали бы эти два круга и выделили бы объединение обоих.
Затем для показа целого многослойного запроса можно или показать пять кругов с некоторой комбинацией объединения и пересечения, или иначе объединить каждую круглую скобку и затем скрыть деталь, превратив результаты в новый круг для объединения с другими элементами. Много перетаскивания здесь и динамическое изменение размеров подпунктов для ясности.
Для создания это интуитивное и простое в использовании взяло бы некоторую работу, но для некоторых приложений это будет действительно мощный интерфейс.
Лучший интерфейс я видел это, был управлением собственной разработки, которое потянуло дерево, чтобы ясно показать порядок операций. Я никогда не видел стороннее управление, которое сделало это, но я не искал один также.
Microsoft SQL Server имеет интерфейс как этот, я использовал его в SQL Server 2000, но я держал пари, что это в 2005 специально также, таким образом, можно смотреть, если Вы хотите.
Можно проверить, как Доступ MS делает это. Я не назову это интуитивным, но это просто.
Я раньше работал над системой, где мы выровняли булеву логику, подобную ниже.
Правые столбцы (Внутренние) и (Внешние), обеспечивают два уровня логики.
Variable Inner Outer Condition1 And Condition2 Or Condition1 And Condition5 And Condition4 Or more optimized... Condition4 And Condition1 And Condition2 Or Condition5
Это довольно характерно для своего домена, но f-пятно имеет хороший способ сделать это. Это - фото программное обеспечение управления, и если Вы нажимаете на один из тегов для нахождения изображений тегом, это отображает панель через вершину результатов поиска. Вы затем можете перетащить теги на ту панель, и щелкнуть правой кнопкой для выбора отрицания и можете перетащить теги вокруг в панели для группировки в и и или пункты. Я не уверен, как хорошо, который масштабируется для тонн тегов (или неперечисленные условия), но это очень просто для выяснения и приятно интерактивный.