Это не так элегантно, как ваш пример Mathematica, но следующий код повторяет ваш пример в matplotlib. Основная идея c состоит в том, чтобы построить функцию в виде невидимого многоугольника, показать изображение нормализованной цветовой карты (используя пользовательскую функцию нормы для переноса значений за пределы ± pi/2
), а затем применить к ней полигон функции в качестве обтравочной маски. изображение.
Код:
# Function (improve smoothness of plot by increasing samples from 500)
x = np.linspace(-4,4,500)
y = abs(np.e**(2j*x - x**2/2))
# Set up figure
fig, ax = plt.subplots()
ax.set_ylim(ymin=0, ymax=1)
# Plot line without fill
line, = ax.fill(x, y, facecolor='none')
# Reshape x data for applying cmap
img_data = x.reshape(1, x.size)
# Set up norm between + and - pi/2
norm = mpl.colors.Normalize(vmin=-np.pi/2, vmax=np.pi/2)
# Use hsv cmap (cyclic rainbow)
cmap=plt.cm.hsv
# Function to apply norm cyclicly
def f(x):
return norm(x)%1
# Apply modified norm to img_data
cmap_data = f(img_data)
# Get limits
xmin, xmax = np.min(x), np.max(x)
ymin, ymax = np.min(y), np.max(y)
# Show cmap image
im = ax.imshow(cmap_data, aspect='auto', cmap=cmap, extent=[xmin,xmax,ymin,ymax])
# Clip image along line
im.set_clip_path(line)
Выход:
![enter image description here](https://i.stack.imgur.com/hlBRQ.png)