Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Данные для 3-х мерного графика 
:(
    Опции темы
AleksNR
Дата 2.6.2010, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.5.2010

Репутация: нет
Всего: нет



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

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

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

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

Спасибо за помощь!
PM MAIL   Вверх
AleksNR
Дата 3.6.2010, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.5.2010

Репутация: нет
Всего: нет



Как данные извлекать для графика понял, возникла другая проблема. Файл данных .dat  содержит40401 строку. Данные же начинают считываться со 105-й строки, а заканчивают считываться на 402-й. 
Код

#!/usr/bin/env python
# -*- coding: cp1251 -*-

import math as m
from numpy import *
from scipy.special import erf

math = m

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

PM MAIL   Вверх
shupg
Дата 3.6.2010, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 21.6.2006

Репутация: 2
Всего: 2



Привет!
Попробуй, может так чего поймаешь..

Код

FILENAME = r'C:\Program Files\Golden Software\Surfer8\out.dat'

infile = open(FILENAME)

data = []
while True:
    try:
        coords = [float(coord) for coord in infile.readline().strip().split(' ')]
        data.append(coords)
        print coords[0]
    except Exception, e:
        print 'LINE%s: An error occured: %s' % (len(data) + 1, e)
        break

infile.close()


PM MAIL   Вверх
AleksNR
Дата 7.6.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.5.2010

Репутация: нет
Всего: нет



Предыдущая проблема легко решилась.  В данный момент возникла проблема построения 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 поверхности для диплома.


Это сообщение отредактировал(а) AleksNR - 7.6.2010, 15:31
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.