#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. это на самом деле довольно умно и просто! большое спасибо!