Предыдущая проблема легко решилась. В данный момент возникла проблема построения 3d поверхности plot_surface. 3-х мерный график plot построить могу, но он отображается одним цветом и на нем сетки нет, хочу построить plot_surface, а также изолинии. Суть проблемы в том, что я извлекаю данные для построения графиков из созданных текстовых файлов, в примера построения поверхностей я видел построение сетки и указание аналитической зависимости Z = f(X, Y), вот например: Код | from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import matplotlib.pyplot as plt import numpy as np
fig = plt.figure() ax = Axes3D(fig) X = np.arange(-5, 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet)
plt.show()
|
Вот мой код:Код |
#!/usr/bin/env python # -*- coding: cp1251 -*-
import math as m import numpy as np from numpy import * from scipy.special import erf import matplotlib as mpl from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import matplotlib.pyplot as plt
math = m materials = 2 if materials == 1: comb = "Ti-6Al-4V SiC Al" k1 = 1.2095 k2 = 183.8 k3 = 235 rho1 = 4429 rho2 = 3210 rho3 = 2700 c1 = 625.30 c2 = 750 c3 = 235 elif materials == 2: comb = "SiC Ti-6Al-4V Al" k1 = 183.8 k2 = 1.2095 k3 = 235 rho1 = 3210 rho2 = 4429 rho3 = 2700 c1 = 750 c2 = 625.30 c3 = 235
r1 = 0.3 r2 = 0.33 l = 1 s1 = pi*r1**2 s2 = pi*r2**2 - s1 s3 = l**2 - (s1 + s2) rho_c = rho1*c1*s1/l**2 + rho2*c2*s2/l**2 + rho3*c3*s3/l**2 rho_c = float(rho_c)
l_razm = 0.2 G_razm = 2 count_l = int(G_razm/l_razm)
T0 = 300 T1 = 900 t = 1500
k_eff_chisl = 123.712 k_eff_teor = 124.023 chi = k_eff_chisl/rho_c
data_in = open('C:\Program Files\Golden Software\Surfer8\out.dat', 'r') lines = data_in.readlines() data_in.close() datafile3D = 'C:\Program Files\Golden Software\Surfer8\gr3D.txt' data_out3D = open(datafile3D, 'a') datafile2D = 'C:\Program Files\Golden Software\Surfer8\gr2D.txt' data_out2D = open(datafile2D, 'a') i = 0 for c in range(0, count_l): for line in lines: coords = line.split() coordsx = float(coords[0])*l_razm + i*l_razm coordsy = float(coords[1])*l_razm coordsN = float(coords[2]) + 0.5 V0 = T1 - (T1 - T0)*erf(coordsx/(2*sqrt(chi*t))) V1 = coordsN*(T0 - T1)*exp(-coordsx**2/(4*chi*t))/(sqrt(pi*chi*t)) T = float(V0 + V1*l_razm) kp = str(coordsx) + " " + str(coordsy) + " " + str(coordsN) + " " + str(V0) + " " + str(V1) + " " + str(T) + "\n" data_out3D.writelines(kp) i += 1
k = 0 for c in range(0, count_l): for line in lines[20100 : 20301]: coords = line.split() coordsx = float(coords[0])*l_razm + k*l_razm coordsN = float(coords[2]) + 0.5 V0 = T1 - (T1 - T0)*erf(coordsx/(2*sqrt(chi*t))) V1 = coordsN*(T0 - T1)*exp(-coordsx**2/(4*chi*t))/(sqrt(pi*chi*t)) T = float(V0 + V1*l_razm) kp = str(coordsx) + " " + str(coordsN) + " " + str(V0) + " " + str(V1) + " " + str(T) + "\n" data_out2D.writelines(kp) k +=1
X, Y, V0, V1, T = np.loadtxt(datafile3D, usecols=[0,1,3,4,5], unpack=True) X_2D, V0_2D, V1_2D, T_2D = np.loadtxt(datafile2D, usecols=[0,2,3,4], unpack=True) fig = plt.figure(1) ax = Axes3D(fig) ax.plot3D(X, Y, V0, label='V0')
fig = plt.figure(2) plt.subplot(211) plt.plot(X_2D, V0_2D, label='V0') plt.xlabel('X') plt.ylabel('T0, K') plt.title('Zero correction to the temperature depending on the coordinates X') plt.xlim(0,2) plt.ylim(300,900) plt.grid(True)
plt.subplot(212) plt.plot(X_2D, V1_2D, label='V1') plt.xlabel('X') plt.ylabel('T1, K') plt.title('First correction to the temperature depending on the coordinates X') plt.xlim(0,2) plt.ylim(-300,300) plt.grid(True)
fig = plt.figure(3) ax = Axes3D(fig) ax.plot3D(X, Y, V1, label='T1')
plt.show()
|
Смотреть строки 99 - 103 проблема в них, на всякий случай выложил полный код. Если не затруднит, помогите решить проблему, очень нужны красивые 3d поверхности для диплома.
|