Якчанд хат ва легенда
Чаро якчанд хатро муқоиса мекунем?
Як силсила тағйиротро нишон медиҳад, чанд силсила бошад барои муқоиса ёрӣ медиҳад: ду дастгоҳ, нақша ва ченкуниҳои воқеӣ ё роҳҳои гуногуни коркарди маълумот. Дар минтақаи умумӣ қиматҳо бо як шкала хонда мешаванд ва фарқҳо зуд намоён мегарданд. Вале бе шарҳи рангҳо хонанда бояд тахмин кунад, ки ҳар хат ба кадом силсила тааллуқ дорад.
Барои ин легенда лозим аст: рӯйхати номҳои силсилаҳо бо намунаҳои хатҳояшон. Дар ин ҷо хат илова мекунем, тартибро нигоҳ медорем, хатҳои роҳнамо мегузорем ва нуқтаҳои алоҳидаро шарҳ медиҳем. Ҳар мисол барномаи алоҳида аст ва баробари расм хосиятҳои объектҳои сохташударо чоп мекунад.
1. Ҳар plot хат илова мекунад
Даъвати нави plot дар ҳамон минтақа хати пешинаро иваз намекунад. Маълумоти ҳар силсила алоҳида нигоҳ дошта мешавад. Агар ранг муайян нашуда бошад, matplotlib ранги навбатиро аз даври рангҳои танзимшуда мегирад: дар ороиши стандартӣ аввал кабуд, баъд норанҷӣ.
import matplotlib.pyplot as plt
plt.plot([0, 1], [2, 4])
plt.plot([0, 1], [3, 2])
print(len(plt.gca().lines))
for line in plt.gca().lines:
print(list(line.get_ydata()))
Натиҷа:
2
[2, 4]
[3, 2]
Дар lines ду сабт ҳаст, ки ба ду даъват мувофиқанд. Тартиби илова кардан барои хондани минбаъдаи график муҳим аст. Барои графики мустақил минтақаи нав созед ё пешинаро бо plt.close("all") пӯшед.
2. Вазифаҳои label ва legend гуногунанд
label номест, ки дар хат нигоҳ дошта мешавад. legend() аз ин номҳо рӯйхати намоён месозад. Аввал хатҳои номдорро месозанд ва баъд легендаро даъват мекунанд.
import matplotlib.pyplot as plt
plt.plot([0, 1], [2, 4], label="A")
plt.plot([0, 1], [3, 2], label="B", linestyle="--")
legend = plt.legend(loc="upper left")
print([text.get_text() for text in legend.get_texts()])
Натиҷа:
['A', 'B']
loc="upper left" легендаро дар кунҷи болои чап мегузорад. Вариантҳои дигар upper right, lower left, lower right мебошанд; қимати пешфарзи best ҷойеро интихоб мекунад, ки объектҳоро камтар мепӯшонад. Легенда бояд ба хондани маълумот ёрӣ диҳад, на ин ки нуқтаҳои муҳимро пӯшонад.
Ду силсиларо беҳтар аст танҳо бо ранг фарқ накунем. linestyle="--" хати рахдор ва marker="o" доираҳо дар нуқтаҳо медиҳад. Ин барои чопи сиёҳу сафед ва ҳангоми душвор будани фарқкунии рангҳо ёрӣ медиҳад. Матни label метавонад фосилаҳо ва воҳидҳои ченак дошта бошад.
3. Силсилаҳои зиёд — як давр
Агар тарзи сохтани силсилаҳо якхела бошад, ном ва қиматҳоро паҳлуи ҳам нигоҳ доштан қулай аст. Давр як ҷуфтро гирифта, як хат илова мекунад. Мисоли навбатӣ қасдан аз силсилаи B оғоз мешавад: matplotlib номҳоро аз рӯйи алифбо ҷудо намекунад.
import matplotlib.pyplot as plt
series = [("B", [4, 3, 5]), ("A", [2, 4, 4])]
for name, values in series:
plt.plot([0, 1, 2], values, label=name, marker="o")
legend = plt.legend()
print([line.get_label() for line in plt.gca().lines])
print(len(legend.get_texts()))
Натиҷа:
['B', 'A']
2
Ҳам хатҳо ва ҳам сабтҳои легенда бо тартиби B, A меоянд. Дарозии рӯйхати умумии координатаҳои уфуқӣ бояд ба ҳар силсила мувофиқ бошад. Агар силсилаҳо дар вақтҳои гуногун чен шуда бошанд, ба ҳар яке x ва y-и худашро диҳед.
4. Хатҳои роҳнамо дар график
Хати уфуқӣ сатҳи доимӣ ва хати амудӣ лаҳза ё мавқеъро нишон медиҳад. axhline(y) ва axvline(x) чунин роҳнаморо дар тамоми минтақа мекашанд, ҳатто агар миқёс тағйир ёбад.
import matplotlib.pyplot as plt
horizontal = plt.axhline(6, color="gray", linestyle=":", label="Ҳад")
vertical = plt.axvline(2, color="black")
plt.legend()
print(list(horizontal.get_ydata()))
print(list(horizontal.get_xdata()))
print(list(vertical.get_xdata()))
Натиҷа:
[6, 6]
[0, 1]
[2, 2]
Хати уфуқӣ ду координатаи якхелаи y=6 дорад. x-ҳои он 0 ва 1 мебошанд, вале онҳо ҳиссаҳои паҳноии минтақаанд, на қиматҳои меҳвари маълумот. Баръакс, дар хати амудӣ x бо координатаҳои маълумот ва y бо ҳиссаҳои баландии минтақа чен мешавад. Аз ин рӯ, вақте хат бояд тамоми равзанаи намоёнро гузарад, axhline аз plot-и ду нуқта қулайтар аст.
Хати роҳнамо низ метавонад label дошта, ба легенда дохил шавад. Барои порчаи маҳдуд бо координатаҳои одии маълумот дар ҳар ду меҳвар plot истифода баред; ададҳои 0 ва 1-и роҳнаморо лаҳзаҳои воқеии ченкунӣ ҳисоб накунед.
5. Навиштаҷоти нуқтаҳои алоҳида
text(x, y, text) матнро дар ҷойи муайян мегузорад. annotate нуқтаи шарҳшаванда (xy) ва ҷойи матнро (xytext) алоҳида муайян мекунад. Параметри arrowprops ҳангоми зарурат тирча илова мекунад.
import matplotlib.pyplot as plt
plt.plot([0, 1, 2], [2, 3, 5])
plt.text(0, 2, "оғоз")
plt.annotate("қулла", xy=(2, 5), xytext=(1, 6),
arrowprops={"arrowstyle": "->"})
print([text.get_text() for text in plt.gca().texts])
Натиҷа:
['оғоз', 'қулла']
Бо танзимоти пешфарз ҳам ҷойи матн ва ҳам нуқта бо координатаҳои маълумот чен мешаванд. Дар ин ҷо матни «қулла» дар (1, 6) аст, вале тирча ба (2, 5) ишора мекунад. Навиштаҷот хати маълумот илова намекунанд ва худкор ба сабтҳои легенда табдил намеёбанд.
Легенда дар дохил чӣ гуна кор мекунад?
Минтақа объектҳои хатро нигоҳ медорад; ҳар яке маълумот, услуб ва ном дорад. Ҳангоми даъвати legend() matplotlib объектҳои мувофиқро ҷамъ карда, объекти алоҳидаи легендаро бо намунаҳои хурд месозад. Номи аз _ саршаванда дар ҷамъкунии худкор гузаронда мешавад; номҳои дохилии хатҳои беном ҳамин гунаанд.
Легенда ҳолати лаҳзаи сохта шуданашро инъикос мекунад. Агар баъд силсилаи нав илова шавад, legend()-ро боз даъват кунед. Ин ба мундариҷаи китоб монанд аст: бахши нав аллакай ҳаст, вале рӯйхати бахшҳоро нав кардан лозим аст.
Хатоҳои маъмул ва ислоҳи онҳо
- Легенда бе номҳо. Пас аз
plt.plot([2, 4]); plt.legend()рӯйхат холӣ мешавад ва matplotlib огоҳӣ медиҳад. Ислоҳ: ҳангоми сохтани хатlabel="A"диҳед ваlegend()-ро боз даъват кунед. - Легенда хеле барвақт. Агар
plt.legend()пеш аз иловаи хати дуюм иҷро шавад, номи он дар рӯйхат намеояд. Ислоҳ: легендаро пас аз ҳамаи силсилаҳо созед ё нав кунед. - Самти нодурусти роҳнамо.
plt.axvline(6)мавқеи уфуқиро қайд мекунад, на сатҳиy=6-ро. Ислоҳ: барои сатҳplt.axhline(6)истифода баред. - Ҷудокунии зиёдатӣ.
for name in sorted(data): ...тартиби силсилаҳоро тағйир медиҳад, агар тартиби аслӣ лозим бошад. Ислоҳ: маълумотро бо тартиби зарурӣ гузаред ва номи ҳар хатро ҳамроҳи қиматҳояш нигоҳ доред.
Ёддошт
| Вазифа | Восита |
|---|---|
| Иловаи силсила | боз як plt.plot(x, y) |
| Номгузории хат | label="..." |
| Намоиш ё навкунии легенда | plt.legend() |
| Интихоби ҷойи он | plt.legend(loc="upper left") |
| Қайди сатҳ ё мавқеъ | plt.axhline(y), plt.axvline(x) |
| Ҷойгиркунии матн | plt.text(x, y, text) |
| Ишораи навиштаҷот ба нуқта | plt.annotate(text, xy=..., xytext=..., arrowprops=...) |