Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

MatPlotLib – побудова графіків в Python

with 3 comments

Трошки про малювання графіків в Python. Має бути корисне більшості студентів, і не тільки.

Був собі один математик. І як кожен математик він малював графіки. В MATLAB. Графіки були симпатичні, і йому подобались. Він програмував на MATLAB, поки не захотів обробляти дані, що передаються через різні протоколи інтернету, чи читаються з бази даних. MATLAB не будучи універсальною мовою програмування не міг дати йому можливості доступу до таких речей. Тому цей математик перейшов на Python. Python йому сподобався, бо мав все, чого не вистачало MATLAB. Але на відміну від MATLAB він не вмів малювати графіки. Тому математик вирішив виправити цей недолік, і створив MathPlotLib. Продовження історії від самого математика

А я дивився лекції MIT, додивився до сімнадцятої, в якій професор написав симулятор п’яного студента посеред поля. Там вони використовували модуль, який називався pylab.

Виявилось що це не вбудований модуль, і його треба доставляти. Коли я вирішив проблеми з OC, погуглив, і вирішив проблему:

sudo apt-get install python-matplotlib

Трохи почитав, і написав програмку, яка малює графіки. Програмка аналогічної функціональності на C++ займала б не менше 500 рядків. Приклад малювання графіка:

Програма побудови графіка
f(x)=sin(x)/(sqrt(x)+1)
На інтервалі [a,b)
a=0
b=30
0.03
Заголовок функції (LaTeX, не обов'язково) \frac{\sin x}{\sqrt{x}+1}

Результат:

Сама програма:

# coding=utf-8
import matplotlib.pyplot as plt
from math import * #Берем всі функції що можуть знадобитись

print "Програма побудови графіка"

fstring=raw_input("f(x)=")#Вводимо текст функції

def f(x):
	return eval(fstring) # ну, і відповідно за ним обчислюємо функцію.

print "На інтервалі [a,b]"# Вводимо інтервал
a=input("a=")
b=input("b=")

assert a<b, "a >= b"# Перевіряємо щоб інтервал був правильним

delta=(b-a)/1000.0 # Беремо невеликий діаметр розбиття

X=[] # Координати графіка
Y=[]
x=a
while x<b: #На всьому інтервалі
	X.append(x)
	Y.append(f(x)) #Табулюємо
	x+=delta

plt.rc('text', usetex=True) # Ця опція вказує нам, що треба використати зовнішній парсер LaTeX. Залежності: LaTeX, dvipng, ghostscript
plt.plot(X,Y) # Малюємо графік. Список X не обов'язковий, але тоді замість нього беруть range(0,len(Y))
plt.ylabel("$f(x)$") #Підписи
plt.xlabel("$x$")
label=raw_input("Заголовок функції (LaTeX, не обов'язково) ") 
plt.title(r"$\displaystyle f(x)="+label+"$") # заголовок графіка
plt.grid(True) # сітка
plt.show()     # і нарешті покажемо це користувачу

Варто було б ще зауважити, що результат виводиться в спеціальне вікно, де його можна переглянути, і зберегти не тільки в png, а і в svg, чи формати для створення типографічних документів LaTeX.

Advertisements

Written by bunyk

Листопад 14, 2009 at 23:57

Оприлюднено в Графіка, Кодерство

Tagged with ,

Відповідей: 3

Subscribe to comments with RSS.

  1. щось тут фіг програму знайдеш((

    Наташа

    Січень 14, 2012 at 11:32

    • Вона написана прямо між реченням “сама програма” і “варто було б ще зауважити…”.

      Може ви хотіли б аби вам її скомпілювали?

      bunyk

      Січень 14, 2012 at 23:38

  2. […] якісь панди. Це, як виявилось обгортка навколо matplotlib, numpy і подібних гарних речей. А ще, лазячи по своїх […]


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: