2016-12-18 3 views
1

Я пытаюсь понять, как использовать метод «set_ydata», я нашел много примеров на веб-страницах matplotlib, но нашел только коды, в которых «set_ydata» «утоплен» в больших и сложных понимать коды.[matplotlib]: понимание метода «set_ydata»

Мне нужен короткий и понятный код, который поможет мне понять, как работает «set_ydata». Вот короткий код, который обеспечивает участок под

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(-3, 3, 0.01) 
j = 1 
y = np.sin(np.pi*x*j)/(np.pi*x*j) 
fig = plt.figure() 
ax = fig.add_subplot(111) 
line, = ax.plot(x, y) 
plt.show() 

enter image description here

Теперь, с помощью следующего кода, я удалить линию, проведенную на «ах» сюжетные, я использую «set_ydata», чтобы изменить сюжет и наконец, я хотел бы, чтобы нарисовать линию снова, но я не нашел ничего, что сделать последний шаг

line.remove() 
j = 2 
y = np.sin(np.pi*x*j)/(np.pi*x*j) 
line.set_ydata(y) 

enter image description here

не «plt.d raw() "ни" plt.show() "ничему не нарисовать. Не могли бы вы предложить мне что-нибудь, что нарисовало новую линию?

ответ

3

Неудивительно, что вы ничего не видите, если удалите строку, на которую установлены данные.

Как указано в названии функции set_data, она устанавливает точки данных объекта Line2D. set_ydata - это особый случай, который устанавливает только ydata.

Использование set_data в основном имеет смысл при обновлении графика, как в вашем примере (просто не удаляя линию).

import matplotlib.pyplot as plt 
import numpy as np 

x = np.arange(-3, 3, 0.01) 
j = 1 
y = np.sin(np.pi*x*j)/(np.pi*x*j) 
fig = plt.figure() 
ax = fig.add_subplot(111) 
#plot a line along points x,y 
line, = ax.plot(x, y) 
#update data 
j = 2 
y2 = np.sin(np.pi*x*j)/(np.pi*x*j) 
#update the line with the new data 
line.set_ydata(y2) 

plt.show() 

Очевидно, что это было бы гораздо проще непосредственно сюжет ax.plot(x, y2). Поэтому set_data обычно используется только в тех случаях, когда это имеет смысл и к которому вы относитесь как «большие и трудно понятные коды».

+0

Там, где два вопроса с моим кодом. Первое - это то, что вы говорите: «line.remove()» удалить сюжет, и вы хотите нарисовать его больше! Во-вторых, я использую блокнот jupyter, и я должен добавить строку «% matplotlib notebook» в начале сценария, иначе я не смогу изменить сюжет, как только это будет сделано. –

Смежные вопросы