Гузариш ба мундариҷа
Мавзӯи 1 аз 5

Графики аввал

Графики хаттӣ барои чӣ лозим аст?

Ҷадвал ададҳои дақиқро нигоҳ медорад, вале аз он афзоиш, коҳиш ё тағйироти ногаҳониро зуд дидан душвор аст. Графики хаттӣ нишон медиҳад, ки бузургӣ чӣ гуна тағйир меёбад: ҷараёни об дар вақт, суръати боргирӣ ё шумораи меҳмонон. Хат вақте мувофиқ аст, ки тартиби мушоҳидаҳо маъно дошта бошад; барои категорияҳои мустақил баъдтар сутунҳоро меомӯзем.

matplotlib аз маълумот график месозад ва онро ҳамчун объектҳои Python нигоҳ медорад. Дар ин мавзӯъ координатаҳоро медиҳем, меҳварҳоро номгузорӣ мекунем ва намуди хатро идора менамоем. Номҳо ва воҳидҳои ченак баробари худи нуқтаҳо муҳиманд: бе онҳо хонанда намефаҳмад, ки чиро муқоиса мекунад.

Ҳар мисоли поён барномаи алоҳида аст. Дар сайт тугмаи Иҷро кардан расмро зери натиҷа нишон медиҳад. Дар мисолҳо хосиятҳои график низ чоп мешаванд, то натиҷаро бо матн санҷидан мумкин бошад. Дар компютери худ тирезаро бо plt.show() мекушоянд ва файлро бо plt.savefig("chart.png") нигоҳ медоранд.

1. Координатаҳо ва тартиби нуқтаҳо

pyplot маҷмӯи функсияҳо барои сохтани график аст; онро одатан бо номи plt ворид мекунанд. Координатаи уфуқӣ x ва амудӣ y ном дорад. Функсияи plot(x, y) ҷуфтҳои дорои индекси якхеларо гирифта, бо тартиби додашуда мепайвандад.

Барои санҷидани натиҷа минтақаи ҷориро бо plt.gca() мегирем. Рӯйхати lines хатҳои онро нигоҳ медорад ва методҳои хат get_xdata() ва get_ydata() координатаҳоро бармегардонанд.

import matplotlib.pyplot as plt

plt.plot([0, 2, 4], [2, 1, 3])
line = plt.gca().lines[0]
print(list(line.get_xdata()))
print(list(line.get_ydata()))

Натиҷа:

[0, 2, 4]
[2, 1, 3]

Дар ин ҷо се нуқта ҳаст: (0, 2), (2, 1), (4, 3). lines[0] хати аввалро интихоб мекунад. Худи plot чизе чоп намекунад.

Агар танҳо y дода шавад, координатаҳои уфуқӣ индексҳои аз сифр саршаванда мешаванд:

import matplotlib.pyplot as plt

plt.plot([7, 4, 6])
print([int(v) for v in plt.gca().lines[0].get_xdata()])

Натиҷа:

[0, 1, 2]

Пас рақамҳои мушоҳидаҳо ва қиматҳои онҳо маълумоти гуногунанд. Агар координатаҳои муайяни вақт ё масофа лозим бошанд, онҳоро ҳамчун аргументи аввал ошкоро диҳед.

2. Массивҳо ва графики функсия

Барои функсия аввал маҷмӯи x интихоб шуда, баъд y-ҳои мувофиқ ҳисоб мешаванд. Массиви numpy амалҳои арифметикиро якбора ба ҳамаи элементҳо татбиқ мекунад. np.linspace(start, stop, count) шумораи count нуқтаи баробармасофаро месозад ва одатан ҳар ду сарҳадро дар бар мегирад.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-1, 1, 5)
y = 2 * x + 1
plt.plot(x, y)
print(x.tolist())
print(y.tolist())

Натиҷа:

[-1.0, -0.5, 0.0, 0.5, 1.0]
[-1.0, 0.0, 1.0, 2.0, 3.0]

matplotlib нуқтаҳои ҳисобшударо бо порчаҳои рост мепайвандад, на ин ки худи формуларо тасвир кунад. Барои хати каҷ тӯри зичтар одатан намуди ҳамвортар медиҳад, вале ба маълумоти аслӣ ченкунии нав илова намекунад.

3. Сарлавҳа ва воҳидҳои ченак

Сарлавҳа мефаҳмонад, ки чӣ тасвир шудааст, номҳои меҳварҳо бошанд маънои ҳар координатаро нишон медиҳанд. title сарлавҳаи графики ҷорӣ, xlabel ва ylabel номҳои меҳварҳоро муайян мекунанд.

import matplotlib.pyplot as plt

plt.plot([0, 2], [1, 3])
plt.title("Ҷараён")
plt.xlabel("Вақт, с")
plt.ylabel("Литрҳо")
ax = plt.gca()
print(ax.get_title())
print(ax.get_xlabel())
print(ax.get_ylabel())

Натиҷа:

Ҷараён
Вақт, с
Литрҳо

Матн дар график айнан нигоҳ дошта мешавад. Ҳарфҳои калон ё хурд, фосилаҳо ва воҳидҳо, аз ҷумла дар санҷиши масъалаҳо, аҳамият доранд. Номи меҳвар ададҳоро тағйир намедиҳад ва сонияҳоро ба дақиқа табдил намедиҳад.

4. Ранг, услуби хат ва нишонҳо

Нишон (marker) аломати хурд дар ҷойи мушоҳида аст. Сатри формат ранг, услуби хат ва шакли нишонро якҷо мекунад. Масалан, m:s хати арғувонии нуқтадор бо нишонҳои мураббаъро ифода мекунад. plot рӯйхати хатҳои сохташударо бармегардонад; навишти line, = ... хати ягонаи онро мегирад:

import matplotlib.pyplot as plt

line, = plt.plot([1, 2, 3], [4, 2, 5], "m:s", linewidth=2)
print(line.get_color(), line.get_linestyle(), line.get_marker())
print(line.get_linewidth())

Натиҷа:

m : s
2.0

Барои навишти равшантар параметрҳои алоҳида ҳастанд: color="green", linestyle=":", marker="s". Рангро бо номе мисли tab:blue ё рамзи #ff8800 низ медиҳанд. linewidth ғафсии хат ва markersize андозаи нишонҳоро идора мекунад. Услубҳои -, --, :, -. хати яклухт, рахдор, нуқтадор ва рахунуқтадор мебошанд. Нишонҳои o, s, ^, x доира, мураббаъ, секунҷа ва салибчаанд.

5. Тӯр, ҳудудҳо ва аломатҳои шкала

Тӯр барои муқоисаи нуқта бо шкала ёрӣ медиҳад. Ҳудудҳо равзанаи намоёнро муайян мекунанд, аломатҳои шкала бошанд ҷойи навиштаҷоти меҳварро. Ин танзимот гуногунанд ва координатаҳои хатро тағйир намедиҳанд.

import matplotlib.pyplot as plt

plt.plot([0, 2, 4], [2, 1, 3])
plt.grid(True)
plt.xlim(0, 6)
plt.ylim(0, 5)
plt.xticks([0, 2, 4, 6])
ax = plt.gca()
print(ax.get_xlim())
print(ax.get_xticks().tolist())
print(any(g.get_visible() for g in ax.get_xgridlines()))

Натиҷа:

(0.0, 6.0)
[0, 2, 4, 6]
True

xlim ҳудудҳои уфуқӣ ва ylim амудиро муайян мекунанд; xticks ва yticks аломатҳои шкаларо идора мекунанд. Дар ин ҷо аз нуқтаи охирин ба рост ҷойи холӣ мемонад. Агар аломате берун аз ҳудудҳои ҷорӣ бошад, matplotlib метавонад онҳоро васеъ кунад, то аломат намоён шавад.

Дар дохил чӣ рӯй медиҳад?

Варақеро бо тӯри координатӣ тасаввур кунед. pyplot минтақаи ҷориро дар варақ интихоб мекунад. Даъвати plot объекти Line2D-ро бо координатаҳо ва хосиятҳо сохта, ба минтақа илова мекунад. Номҳо ва тӯр алоҳида нигоҳ дошта мешаванд. Ҳангоми нишон додан ё нигоҳдории расм matplotlib координатаҳои маълумотро ба ҷойҳои тасвир табдил дода, ҳамаи объектҳоро мекашад.

Аз ин рӯ санҷиши масъалаҳо маълумот ва хосиятҳои объектҳоро мехонад, на ин ки онҳоро аз пикселҳо тахмин кунад. Тартиби нуқтаҳо ва матни дақиқи шарт муҳиманд. Агар якчанд мисоли мустақилро дар як сессия иҷро кунед, байни онҳо plt.close("all") истифода баред, то хатҳои пешина дар графики ҷорӣ намонанд.

Хатоҳои маъмул ва ислоҳи онҳо

  1. Дарозии гуногуни координатаҳо. plt.plot([0, 1], [4]) хатои ValueError медиҳад: ба ҳар x як y лозим аст. Ислоҳ: ҳамчун рӯйхати дуюм, масалан, [4, 6] диҳед.
  2. Рақамгузории ноошкор. plt.plot([7, 4, 6]) нуқтаҳоро дар x=0, 1, 2 мегузорад, ҳатто агар муаллиф дигар хел ҳисоб кунад. Ислоҳ: координатаҳои уфуқии лозимиро ошкоро диҳед.
  3. Интизори ҷудокунии худкор. plt.plot([2, 0, 1], [4, 1, 3]) аввал аз x=2 ба x=0, баъд ба x=1 меравад. Агар афзоиш аз рӯйи x лозим бошад, ҷуфтҳои координатаҳоро якҷо ҷудо кунед; ҷудокунии алоҳидаи y мувофиқатро вайрон мекунад.
  4. Номи нодурусти ранг. color="сабз" хатои ValueError медиҳад: китобхона номи шинохтаи худро интизор аст. Ислоҳ: color="green" ё рамзи шонздаҳии мувофиқро истифода баред. Номҳои график метавонанд тоҷикӣ бошанд.

Ёддошт

Амал Навишт
Хат аз ҷуфтҳои координатаҳо plt.plot(x, y)
Тӯри баробармасофа np.linspace(start, stop, count)
Сарлавҳа ва номҳои меҳварҳо plt.title(...), plt.xlabel(...), plt.ylabel(...)
Намуди хат color, linestyle, linewidth, marker, markersize
Тӯр ва равзанаи намоён plt.grid(True), plt.xlim(...), plt.ylim(...)
Аломатҳои шкала plt.xticks(...), plt.yticks(...)
Санҷиши координатаҳо line.get_xdata(), line.get_ydata()