Grafiklar. Matplotlib moduli


Графикларда чизиқлар ва геометрик фигуралар яратиш



Download 8,39 Mb.
bet64/70
Sana01.04.2022
Hajmi8,39 Mb.
#522518
1   ...   60   61   62   63   64   65   66   67   ...   70
Bog'liq
Matplotlib2

Графикларда чизиқлар ва геометрик фигуралар яратиш
Matplotlib turli xil geometrik shakllar, strelkalar, shuningdek chiziqlarni turli usullar bilan chizish imkonini beradi. Masalan, quyidagi rasmni oladigan skriptni ko'rib chiqamiz:

Grafikadagi barcha geometrik jismlar bir necha bosqichda chizilgan. Avval siz joriy jadvalga bog'langan o'qni (yoki yaratishingiz) olishingiz kerak. Bu pylab.gca () funktsiyasi yordamida amalga oshiriladi. Ushbu funktsiya matplotlib.axes.Axes-dan olingan klassni qaytaradi, bizning misolimizda AxesSubplot klassi bo'ladi.
Shundan so'ng, siz ko'p geometrik shakllar uchun matplotlib.patches modulida joylashgan geometrik shakl ob'ektini yaratishingiz kerak, ammo Line2D chizig'i klassi matplotlib.lines modulida mavjud. Shu bilan birga, xuddi shu geometrik shakllar pylab moduli yordamida yaratilishi mumkin, ular quyida muhokama qilinadi, lekin biz boshlash uchun matplotlib.patches va matplotlib.lines modullaridan foydalanamiz.
Geometrik shakl ob'ekti yaratilgandan so'ng, biz uni aksariyat geometrik shakllar uchun add_patch () usuli yoki Line2D klassi misolida add_line () usuli yordamida qo'shishimiz kerak.
Ushbu misolda yaratilgan har bir ob'ektni batafsil ko'rib chiqmaymiz, ular etarli darajada ko'p parametrlarga ega bo'lishi mumkin, ushbu maqolada biz juda mantiqiy ko'rinmaydigan yoki osongina unutilishi mumkin bo'lgan ba'zi xususiyatlarga e'tibor qaratamiz.
Aniqlik uchun, ushbu misolda har bir ob'ekt turini chizish alohida funktsiya sifatida olinadi. Birinchidan, keling, ushbu misolning to'liq kodini ko'rib chiqamiz va keyin ba'zi ob'ektlarning xususiyatlarini ko'rib chiqamiz.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pylab
import matplotlib.patches
import matplotlib.lines
import matplotlib.path
def drawLine (axes):
"""
Рисование линии
"""
x0 = 0
y0 = 0
x1 = 1
y1 = 0.5
x2 = 0.5
y2 = 1.0
line = matplotlib.lines.Line2D ([x0, x1, x2], [y0, y1, y2], color="k")
axes.add_line (line)
pylab.text (0.5, 1.1, "Line2D", horizontalalignment="center")
def drawCircles (axes):
"""
Рисование окружностей
"""
circle1 = matplotlib.patches.Circle((0, 0), radius=0.1, fill=True)
axes.add_patch (circle1)
pylab.text (0, 0.2, "Circle", horizontalalignment="center")
circle2 = matplotlib.patches.Circle((0, 0), radius=1.5, fill=False, color="r")
axes.add_patch (circle2)
pylab.text (0, 1.55, "Circle", horizontalalignment="center")
def drawArrow (axes):
"""
Рисование стрелки
"""
arrow_x0 = -1.0
arrow_y0 = 0.5
arrow_dx = 1
arrow_dy = 0.5
arrow = matplotlib.patches.Arrow (arrow_x0, arrow_y0, arrow_dx,arrow_dy,
width=0.2, color="g")
axes.add_patch (arrow)
pylab.text (-0.5, 1.0, "Arrow", horizontalalignment="center")
def drawArc (axes):
"""
Рисование дуги
"""
arc_x = 0
arc_y = 0
arc_width = 1
arc_height = 1
arc_theta1 = 270
arc_theta2 = 360
arc = matplotlib.patches.Arc ((arc_x, arc_y),
arc_width,
arc_height,
theta1 = arc_theta1,
theta2 = arc_theta2)
axes.add_patch (arc)
pylab.text (0.6, -0.3, "Arc", horizontalalignment="center")
def drawPolygons (axes):
"""
Рисование многоугольника
"""
polygon_1 = matplotlib.patches.Polygon ([(0, -0.75),
(0, -1.25),
(0.5, -1.25),
(1, -0.75)])
axes.add_patch (polygon_1)
pylab.text (0.6, -0.7, "Polygon", horizontalalignment="center")
polygon_2 = matplotlib.patches.Polygon ([(-0.5, 0),
(-1, -0.5),
(-1, -1),
(-0.5, -1)],
fill = False,
closed = False)
axes.add_patch (polygon_2)
pylab.text (-1.0, -0.1, "Polygon", horizontalalignment="center")
def drawRect (axes):
"""
Рисование повернутого прямоугольника
"""
rect_coord = (-1.5, 1)
rect_width = 0.5
rect_height = 0.3
rect_angle = 30
rect = matplotlib.patches.Rectangle (rect_coord,
rect_width,
rect_height,
rect_angle,
color="g")
axes.add_patch (rect)
pylab.text (-1.5, 1.5, "Rect", horizontalalignment="center")
def drawPath (axes):
vertices = [(1.0, -1.75), (1.5, -1.5), (1.5, -1.0), (1.75, -0.75)]
codes = [matplotlib.path.Path.MOVETO,
matplotlib.path.Path.LINETO,
matplotlib.path.Path.LINETO,
matplotlib.path.Path.LINETO,
]
path = matplotlib.patches.Path (vertices, codes)
path_patch = matplotlib.patches.PathPatch (path, fill=False)
axes.add_patch (path_patch)
pylab.text (1.5, -1.75, "Path", horizontalalignment="center")
if __name__ == "__main__":
pylab.xlim (-2, 2)
pylab.ylim (-2, 2)
pylab.grid()
axes = pylab.gca()
axes.set_aspect("equal")
drawLine (axes)
drawPolygons (axes)
drawPath (axes)
drawRect (axes)
drawCircles (axes)
drawArc (axes)
drawArrow (axes)
pylab.show()
Misolni tahlil qilishni chiziqlar chizishdan boshlaylik.
def drawLine (axes):
"""
Рисование линии
"""
x0 = 0
y0 = 0
x1 = 1
y1 = 0.5
x2 = 0.5
y2 = 1.0
line = matplotlib.lines.Line2D ([x0, x1, x2], [y0, y1, y2], color="k")
axes.add_line (line)
pylab.text (0.5, 1.1, "Line2D", horizontalalignment="center")
Ushbu geometrik shakl boshqalardan ajralib turadi, chunki uning klassi matplotlib.lines modulida joylashgan va siz Axes.add_line () usuli yordamida qo'shishingiz kerak. Bundan tashqari, koordinatalar qanday o'rnatilishiga e'tibor bering. Birinchi parametr X o'qi bo'ylab koordinatalar ro'yxatini, ikkinchisi Y o'qi bo'ylab koordinatalar ro'yxatini o'rnatadi, boshqa nomlangan parametrlar tashqi ko'rinishini belgilashi mumkin.
Chiziqlar ko'pburchak (Poligon klassi) yordamida ham chizilishi mumkin, lekin siz ko'pburchak yopilmaganligini ko'rsatishingiz kerak (Poligon konstruktoridagi yopiq parametr False bo'lishi kerak) va to'ldiruvchidan foydalanishingiz shart emas (Poligon konstruktoridagi to'ldirish parametri noto'g'ri bo'lishi kerak). Ushbu misolda drawPolygons funktsiyasi to'ldirilgan va to'ldirilmagan ko'pburchaklarni tortadi. Ikkinchisi yopiq emas, shuning uchun uning ko'rinishi Line2D klassi yordamida chizilgan chiziqqa o'xshaydi:
def drawPolygons (axes):
"""
Рисование многоугольника
"""
polygon_1 = matplotlib.patches.Polygon ([(0, -0.75),
(0, -1.25),
(0.5, -1.25),
(1, -0.75)])
axes.add_patch (polygon_1)
pylab.text (0.6, -0.7, "Polygon", horizontalalignment="center")
polygon_2 = matplotlib.patches.Polygon ([(-0.5, 0),
(-1, -0.5),
(-1, -1),
(-0.5, -1)],
fill = False,
closed = False)
axes.add_patch (polygon_2)
pylab.text (-1.0, -0.1, "Polygon", horizontalalignment="center")
Birinchi parametr sifatida Poligon sinfining konstruktori, Line2D sinfining konstruktoridan farqli o'laroq, koordinatalarni (x, y) belgilaydigan ikki elementli ro'yxatlar yoki tutqichlardan tashkil topgan ro'yxatni qabul qiladi.
Bundan tashqari, (PathPatch) deb nomlangan yo'llar yordamida chiziqlar chizish mumkin.
def drawPath (axes):
vertices = [(1.0, -1.75), (1.5, -1.5), (1.5, -1.0), (1.75, -0.75)]
codes = [matplotlib.path.Path.MOVETO,
matplotlib.path.Path.LINETO,
matplotlib.path.Path.LINETO,
matplotlib.path.Path.LINETO,
]
path = matplotlib.patches.Path (vertices, codes)
path_patch = matplotlib.patches.PathPatch (path, fill=False)
axes.add_patch (path_patch)
pylab.text (1.5, -1.75, "Path", horizontalalignment="center")
PathPatch klassi yordamida chizish bir necha bosqichdan iborat. Birinchidan, nazorat punktlarining ro'yxati tuziladi. Poligon sinfida bo'lgani kabi, bu koordinatalarni (x, y) belgilaydigan ikki elementli ro'yxatlar yoki bog'lamlar ro'yxati.
Keyin matplotlib.path.Path klassining namunasini yaratishingiz kerak, bunda konstruktor ikkita zarur parametrlarni oladi: uchlari va bu uchlari bilan nima qilish kerakligini aniqlaydigan kodlar ro'yxati. Kod raqamlari Path sinfining a'zolari. Ular MOVETO (chiziqsiz bir nuqtaga o'tish), LINETO (berilgan nuqtaga chiziq chizish), CURVE3, CURVE4 (mos ravishda ikkinchi va uchinchi darajali Bezier egri chizig'ini chizish uchun) va CLOSEPOLY (boshlang'ich nuqtaga yo'lni yopish uchun ishlatiladi) qiymatlarini olishlari mumkin.
Ushbu misolda ushbu sinf yordamida bitta singan chiziq chizilgan, ammo printsipial ravishda bir xil klassdan foydalanib siz tekis chiziqlar - kvadratik va kubik Bezier egri chiziqlarini chizishingiz mumkin.
Chiziqlar Ark sinfidan foydalanib chizilgan yoylarni ham o'z ichiga olishi mumkin.
def drawArc (axes):
"""
Рисование дуги
"""
arc_x = 0
arc_y = 0
arc_width = 1
arc_height = 1
arc_theta1 = 270
arc_theta2 = 360
arc = matplotlib.patches.Arc ((arc_x, arc_y),
arc_width,
arc_height,
theta1 = arc_theta1,
theta2 = arc_theta2)
axes.add_patch (arc)
pylab.text (0.6, -0.3, "Arc", horizontalalignment="center")
Arkni chizish oson, shunchaki matplotlib.patches.Arc sinfining namunasini yarating va add_patch usulidan foydalanib uni o'z o'qlariga qo'shing. Ark sinfining konstruktori uchta zarur parametrni oladi: yoy ellipsining markazini koordinatalarini o'rnatadigan va ellipsni bog'laydigan to'rtburchaklar kengligi va balandligi. Ark yoyi chizilgan sektorni belgilash uchun, tea1 va teta2 parametrlari ishlatiladi, ular mos ravishda yoyning boshi va oxirining burchaklarini belgilaydilar. Bundan tashqari, ellipsni o'zboshimchalik bilan burish mumkin, buning uchun siz qo'shimcha parametr burchagini (shuningdek, darajalarda) o'tishingiz kerak

  • Qolgan geometrik shakllarni misoldan chizish juda tushunarli, u erda hech qanday xususiyat yo'q, shuning uchun biz ularga alohida to'xtalmaymiz. Malumot uchun biz matplotlib.patches modulida joylashgan geometrik shakllar sinflarini ro'yxatlaymiz.

• Ark - kamonni chizish.
• Ok - o'qni torting. (shuningdek, bir xil modulda ConnectionPatch, FancyArrowPatch va FancyArrow-ga qarang)
• Circle - doira chizish.
• CirclePolygon - teng tomonli ko'pburchaklarni chizish (shuningdek RegularPolygon-ga qarang).
• Ellips - ellipsni chizish.
• FancyBboxPatch - "ekzotik" to'rtburchaklar chizish (burchak shaklida, o'q shaklida, qirrali qirralari va boshqalar).
• PathPatch - chiziq yoki yopiq joyni chizish.
• Ko'pburchak - ko'pburchak chizish.
• To'rtburchak - to'rtburchaklar chizish.
• Nikoh - "xanjar" chizish (aylana sektori).
Bizning misolimizda biz ob'ektlarni yaratish uchun matplotlib.patches modulidan foydalanganmiz, ammo bu ob'ektlarning ko'pini (lekin ba'zi sabablarga ko'ra hammasi emas) pyllab moduli yordamida yaratish mumkin. Bizning misolimiz quyidagicha qayta yozilishi mumkin:

Download 8,39 Mb.

Do'stlaringiz bilan baham:
1   ...   60   61   62   63   64   65   66   67   ...   70




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish