Есть ли способ динамически отображать точки, взятые у пользователя, без потери предыдущих входных точек пользователя на графике? (python)

#python-3.x #matplotlib

Вопрос:

Например, если у нас есть:

 xs = [1, 2, 3, 4, 5, 6, 7, 8, 9]
ys = [1, 2, 3, 4, 5, 6, 7, 8, 9]
name = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

while True:
    user_input = input('Enter name: ')
    for i, j, name in zip(xs, ys, name):
        if(user_input == name):
            ax.scatter(i, j)
            plt.show()
 

Таким образом, в основном здесь пользователь вводит имя, и оно отображается в соответствии с координатами xs и ys.

Как я могу сделать так, чтобы, если пользователь вводит следующее имя, оно тоже отображалось? без потери предыдущей точки названия на сюжете? Я не уверен, что это называется «динамическим» построением графика.

Ответ №1:

Я бы предпочел сохранить ранее выбранные имена в списке, а затем построить график каждой точки, что-то вроде этого:

 xs = [1, 2, 3, 4, 5, 6, 7, 8, 9]
ys = [1, 2, 3, 4, 5, 6, 7, 8, 9]
names = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

selected_names = []
while True:
    user_input = input('Enter name: ')
    if user_input == 'end':
        break
    
    selected_names.append(user_input)
    for i, j, name in zip(xs, ys, names):
        if name in selected_names:
            plt.scatter(i, j)
    plt.show()
 

Также обратите внимание, что вы меняете «имя» списка на фамилию в списке в цикле «для», поэтому я изменил название списка имен на «имена».

Пс. Если вы хотите, чтобы цвета были согласованными, вам придется использовать какую-либо цветовую карту, иначе цвет «c» изменится, если вы сначала нанесете «c», а затем нанесете «a» позже.

Редактировать: Если вы действительно хотите, чтобы материал был динамичным (графики, которые мгновенно и плавно меняются при вводе пользователем, вы можете посмотреть в IPyWidgets.

Комментарии:

1. это на самом деле довольно умно и просто! большое спасибо!