#python #matplotlib #surface
Вопрос:
Я сделал сценарий для рисования поверхности. X Y выполнены с регулярной сеткой. Z будет результатом положений X и Y f(X,Y), где f-результат вычисления бесконечного ряда или вычисления сходимости (таким образом, нет Exp Sin **2 .. в одной формуле для описания функции). Это не начинается в Spyder. Но работайте в терминале.
Эта команда не была выполнена, так как произошла ошибка при попытке получить код файла из редактора Spyder. Ошибка заключалась в:
Произошло исключение, используйте %tb, чтобы увидеть полную обратную трассировку.
Ошибка типа: handle_get_file_code() получил неожиданный аргумент ключевого слова «save_all»
#import pdb # for debugger import matplotlib import matplotlib.pyplot as plt from matplotlib.ticker import LinearLocator, FormatStrFormatter import numpy as np import math as math def perim(x, y): # return perimeter according AGM MAGM calc # parution http://www.ams.org/notices/201208/rtx120801094p.pdf # author MAGM http://semjonadlaj.com/ xn=x xN=xn yn=y yN=yn R09=xn*xn yn*yn R10=1. if (xn!=0.) and (yn!=0.): while True: yn=yN xn=xN yN=math.sqrt(xn*yn) R10=R10*2 xN=xn-(xn-yn)/2 R09 = R09- R10*((xn-yn)/2)**2 if (R10*((xn-yn)/2)**2) lt; 1e-15: break R09=(R09/yN)*math.pi else: if (xn==0.): R09=yN*4 if (yn==0): R09=xN*4 return R09 # domains #pdb.set_trace() # start the debugger N = 50 Wide = 10. X = np.arange(0.,Wide,Wide/N) Y = np.arange(0.,Wide,Wide/N) Z=np.zeros((N, N)) for i in range(N): for j in range(N): Z[i,j]=perim((Wide/N)*i, (Wide/N)*j) X, Y = np.meshgrid(X, Y) # fourth dimention - colormap # create colormap according to x-value (can use any 50x50 array) color_dimension = Z # change to desired fourth dimension minn, maxx = color_dimension.min(), color_dimension.max() norm = matplotlib.colors.Normalize(minn, maxx) m = plt.cm.ScalarMappable(norm=norm, cmap='jet') m.set_array([]) fcolors = m.to_rgba(color_dimension) # plot fig = plt.figure() ax = fig.add_subplot(111, projection='3d') surf=ax.plot_surface(X,Y,Z, rstride=1, cstride=1, facecolors=fcolors, alpha=0.5, vmin=minn, vmax=maxx, shade=False) ax.set_xlabel('ellipse halfparam a') ax.set_ylabel('ellipse halfparam b') ax.set_zlabel('ellipse perim') Windo= Wide*2*math.pi ax.set_zlim(0, Windo) ax.zaxis.set_major_locator(LinearLocator(10)) ax.zaxis.set_major_formatter(FormatStrFormatter('%.01f')) fig.colorbar(surf, shrink=0.5, aspect=10) ax.contour(X, Y, Z, 10, linewidths=1.5, cmap="autumn_r", linestyles="solid", offset=-1) ax.contour(X, Y, Z, 10, linewidths=1.5, colors="k", linestyles="solid") ax.view_init(elev=20., azim=-100.) plt.show()
Комментарии:
1. Поскольку
save_all
иhandle_get_file_code()
не отображаются в вашем коде, я бы сделал то, что там написано, и «используйте %tb, чтобы увидеть полную обратную связь». ФУ, я получил сообщение об ошибке в строке 20 из-за вашего использования^
. Python использует**
для повышения до степени, предполагая, что вы это имели в виду, а не побитовое исключающее Или.2. Спасибо вам за вашу приятную поддержку. Похоже, это была проблема со Спайдером. Я только что начал отладку в терминале и обнаружил проблему, которую вы выделили. Код работает. На нем показана изопериметрическая поверхность эллипса. Цвет выделяет разнообразный изопериметр. X и Y-это полупараметры эллипса. Z-значение периметра.
3. «Похоже, это была проблема с Spyder», потому что правильный код не запускается в моей среде Spyder. Теперь любой совет, чтобы увидеть кривые уровня в Z в дополнение к цветам, приветствуется (никакой срочности вообще).
4. Обновление: добавлены кривые изопериметра в качестве уровня Z. Изображение результата добавлено.
5. все еще работаю над улучшением сценария, так как были замечены ошибки.