Найти - Пользователи
Полная версия: Данные для 3-х мерного графика
Начало » Python для новичков » Данные для 3-х мерного графика
1 2 3 4
AleksSR
Добрый вечер! Подскажите пожалуйста новичку, как построить 3-х мерный график с помощью python. Нужен график, данные для которого содержатся в файле вида:

значениеX1 значениеY1 значениеZ1
значениеX2 значениеY2 значениеZ2
………………………………………………
значениеXn значениеYn значениеZn

Значения друг от друга отделяются пробелом, следующие значения переменных на новой строке, нужно построить поверхность Z = f(X,Y).

Как извлечь эти данные для построения графика?

Обновление.
Возникает вопрос, как с помощью Python построить 3d surface по данным из текстового файла, 3d график(вместо plot_surface используется plot) строится, а поверхность нет, как строить поверхность по данным из текстового файла? Вот конкретно проблемная часть кода:
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')
plt.savefig('grafik\T0_3D.png', dpi=80)
Весь код на всякий случай:
#!/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 = 'grafik\gr3D.txt'
data_out3D = open(datafile3D, 'a')
datafile2D = 'grafik\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')
plt.savefig('grafik\T0_3D.png', dpi=80)

fig = plt.figure(2)
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.savefig('grafik\T0_2D.png', dpi=80)

fig = plt.figure(3)
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)
plt.savefig('grafik\T1_2D.png', dpi=80)


fig = plt.figure(4)
ax = Axes3D(fig)
ax.plot3D(X, Y, V1, label='T1')
plt.savefig('grafik\T1_3D.png', dpi=80)
Подскажите, если не сложно.
P.S. Почему на форуме при постинге сообщений нет кнопок BB-code, каждый раз теги вручную вводить приходится.
pasaranax
Ты себе даже представить не можешь насколько это просто, нужно лишь попробовать взяться.
AleksSR
Уже понял, сам нарвался на курс Python для науных вычислений и нашел ответ на свой вопрос)
Alex2ndr
Я вообще для таких вот задач использую gnuplot.
Зачем изобретать велосипед…?
AleksSR
Я новичек))) gnuplot входит в стандартную установку python 2.6?
Alex2ndr
AleksSR
gnuplot входит в стандартную установку python 2.6?
Честно говоря он не имеет к питону отношения:
http://ru.wikipedia.org/wiki/Gnuplot
http://www.gnuplot.info/
Но задачу подобную этой решит на раз. Разве что нужно именно в питоне… Т е важен инструмент и процесс, а не результат.
igor.kaist
Одна их самых простых библиотек для 3d это vpython.
Вот здесь немного обсуждали http://python.su/forum/viewtopic.php?pid=23663#p23663
AleksSR
Возникла проблемка - читаются не все данные из dat файла, читается примерно 300 строк, всего в файле с данными 40401 строка. Вот код:
#!/usr/bin/env python
# -*- coding: cp1251 -*-


from numpy import *

infile = open('C:\Program Files\Golden Software\Surfer8\out.dat', 'r')
lines = infile.readlines()
infile.close()
data = []

for line in lines:
coords = line.split(' ')
ksi_x = float(coords[0])
ksi_y = float(coords[1])
N = float(coords[2])
print ksi_x
Alex2ndr
Попробуйте вот так, для начала:
#!/usr/bin/env python
# -*- coding: cp1251 -*-

from numpy import *

# Not used variable
data = []

for line in open('C:\Program Files\Golden Software\Surfer8\out.dat', 'r'):
coords = line.split()
ksi_x = float(coords[0])
ksi_y = float(coords[1])
N = float(coords[2])
print ksi_x
AleksSR
Alex2ndr, попробовал, не помогло, эффект тот же.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB