Имея всего 8 точек для интерполяции, результирующий график не является четко определенным. То есть plt.scatter(x,y,c=v)
будет выглядеть как

Использование tricontourf
графика типа
plt.tricontourf(x,y,v)
будет выглядеть как

и, конечно, вы можете выбрать столько уровней, сколько захотите, например, 100
plt.tricontourf(x,y,v,100)

Хотя это выглядит как рассматриваемый сюжет, я не думаю, что он хорошо подходит для образовательных целей, где вы бы лучше научили людей проблеме интерполяции и различным методам ее выполнения.
В этом смысле хранение данных и построение графиков, вероятно, является лучшим выбором. Поэтому я предпочел бы сначала выполнить интерполяцию, а затем отобразить результат. Возможно, пример Contour нерегулярно расположенных данных является хорошей отправной точкой. И пример для случая здесь может выглядеть как
x = [0.0, 0.5, 1.0, 1.0, 1.0, 0.5, 0.0, 0.0];
y = [0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 0.5];
v = [0.0, 0.0, 0.0, 0.5, 1.0, 1.0, 1.0, 0.5];
import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
xi = np.linspace(min(x), max(x), 100)
yi = np.linspace(min(y), max(y), 100)
zi = griddata((x, y), v, (xi[None,:], yi[:,None]), method='linear')
plt.pcolormesh(xi,yi,zi)
plt.show()

При этом используется график pcolormesh
, который легче понять для отображения данных на регулярной сетке, поскольку он не выполняет никакой интерполяции.