Я пытаюсь построить тепловую карту с разными значениями A. На оси показано количество итераций от 0 до 30 вместо значения A, которое должно быть от 0 до 5.
import numpy as np
from math import e
import matplotlib.pyplot as plt
from ipywidgets import interactive
%matplotlib inline
def ricker(A, x):
return x * e**(A * (1 - x))
import seaborn as sns
A1 = np.linspace(0,5,30)
A2 = np.linspace(0,5,30)
def F(A1,A2):
A1,A2 = np.meshgrid(A1,A2)
Lyap = 0
x = 0.5
for i in range(0,5000):
if i % 2==0:
A = A2
else:
A = A1
Lyap = Lyap + np.log(abs((1-A*x)*e**(A - A*x)))
x = ricker(A, x)
Lyap = Lyap/5000
return Lyap
z = F(A1,A2)
plt.figure(figsize=(16, 16))
ax = sns.heatmap(z)
ax.invert_yaxis()
Извините, я включил импорт, который должен исправить эту ошибку.
Вы должны указать метки x/y, например.
ax = sns.heatmap(z, xticklabels=A1, yticklabels=A2)
Результат довольно некрасивый
Вы можете добиться большего успеха, если немного отформатируете
xlabels = ['{:3.1f}'.format(x) for x in A1]
ylabels = ['{:3.1f}'.format(y) for y in A2]
ax = sns.heatmap(z, xticklabels=xlabels, yticklabels=ylabels)
но вы также можете использовать меньше галочек
ax = sns.heatmap(z, xticklabels=A1, yticklabels=A2)
ax.set_xticks(ax.get_xticks()[::3])
ax.set_xticklabels(xlabels[::3])
ax.set_yticks(ax.get_yticks()[::3])
ax.set_yticklabels(ylabels[::3])
Большое спасибо!
Я получаю сообщение об ошибке с вашим кодом:
NameError: name 'e' is not defined