Диаграммаҳои сутунӣ ва доиравӣ
Диаграммаҳои категорияҳо ва ҳиссаҳо барои чӣ лозиманд?
Агар ҳаҷми кори якчанд шуъбаро муқоиса кунем, хати байни онҳо метавонад тасаввури нодурусти тағйироти пайвастаро диҳад. Диаграммаи сутунӣ категорияҳои алоҳидаро аз рӯйи баландӣ ё дарозӣ муқоиса мекунад. Диаграммаи доиравӣ ба саволи дигар ҷавоб медиҳад: ҳар категория кадом ҳиссаи ҷамъи умумиро ташкил мекунад?
Шаклро аз рӯйи савол интихоб кунед. Барои муқоисаи қиматҳои наздик сутунҳо бо шкалаи умумӣ қулайтаранд; барои чанд қисми калони як бутун доира мувофиқ аст. Ҳар мисоли поён барномаи алоҳида буда, баробари расм хосиятҳои санҷидашавандаи диаграммаро чоп мекунад.
1. Категория ва қимати он
Категория номи гурӯҳ, масалан шуъбаи A аст. bar(names, values) номҳоро дар меҳвари уфуқӣ мегузорад ва қиматҳоро ба баландӣ табдил медиҳад. Номҳо ва ададҳо бо тартиби мувофиқ дода мешаванд.
import matplotlib.pyplot as plt
bars = plt.bar(["A", "B", "C"], [4, 7, 2], color="tab:blue", width=0.6)
print([int(bar.get_height()) for bar in bars])
print([text.get_text() for text in plt.gca().get_xticklabels()])
Натиҷа:
[4, 7, 2]
['A', 'B', 'C']
Натиҷаи даъват BarContainer, маҷмӯи росткунҷаҳо аст. Баландии ҳар росткунҷаро бо get_height() хондан мумкин аст. width=0.6 паҳноиро бо координатаҳои меҳвар муайян мекунад, на баландиро. Қимати сифр категорияро нигоҳ медорад, гарчанде баландии сутун сифр аст.
2. Тартибро маълумот муайян мекунад
matplotlib рейтингро худкор намесозад. Агар тартиби дигар лозим бошад, аввал маълумотро ҷойиваз мекунанд; ном ва қимат бояд якҷо ҳаракат кунанд. Дар ин ҷо се категорияро бо тартиби афзоиши қимат мегузорем:
import matplotlib.pyplot as plt
data = [("A", 4), ("B", 7), ("C", 2)]
ordered = sorted(data, key=lambda pair: pair[1])
names = [name for name, value in ordered]
values = [value for name, value in ordered]
plt.bar(names, values)
print(names)
print(values)
Натиҷа:
['C', 'A', 'B']
[2, 4, 7]
Рӯйхати ҷуфтҳо робитаи ном ва ададро нигоҳ медорад. Агар танҳо қиматҳоро ҷудо кунем, номи A метавонад зери сутуни категорияи дигар монад. Қоидаи тартиб аз масъала вобаста аст: баъзан ҷудокунӣ лозим, баъзан нигоҳдории пайдарпайии аслӣ.
3. Сутунҳои уфуқӣ
Барои номҳои дароз barh қулай аст: категорияҳо дар самти амудӣ ва ададҳо дар самти уфуқӣ меоянд. Категорияи аввал одатан дар поён ҷойгир мешавад. Акнун қиматро паҳноии росткунҷа нишон медиҳад, бинобар ин get_width() мехонем:
import matplotlib.pyplot as plt
bars = plt.barh(["A", "B"], [3, 5])
print([int(bar.get_width()) for bar in bars])
print([text.get_text() for text in plt.gca().get_yticklabels()])
Натиҷа:
[3, 5]
['A', 'B']
Агар категорияи аввал бояд боло бошад, plt.gca().invert_yaxis() истифода баред. Номи меҳвари ададии чунин диаграммаро одатан бо xlabel мегузоранд, на бо ylabel.
4. Навиштани қиматҳо ва ороиш
Баландиро бо адад низ нишон додан қулай аст. bar_label контейнери сутунҳоро гирифта, навиштаҷоти матнӣ месозад. Параметри color метавонад як ранг ё рӯйхати рангҳо аз рӯйи шумораи сутунҳо бошад.
import matplotlib.pyplot as plt
bars = plt.bar(["A", "B"], [4, 6], color=["gold", "teal"])
texts = plt.bar_label(bars)
print([text.get_text() for text in texts])
Натиҷа:
['4', '6']
Барои хонданбобӣ edgecolor="black" илова кунед, width-ро тағйир диҳед ё номҳои дарозро бо plt.xticks(rotation=30) гардонед. Ороиш маълумоти дурустро иваз намекунад: навиштаҷоти зебо болои баландии нодуруст диаграммаро ислоҳ намекунад.
5. Ду силсила паҳлуи ҳам
Агар ҳар категория ду бузургӣ дошта бошад, сутунҳоро паҳлуи ҳам мегузоранд. Барои ин мавқеъҳои ададии категорияҳо ва кӯчишҳои хурд ба чапу рост лозиманд. Номи категория дар маркази ҷуфт гузошта мешавад.
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(2)
left = plt.bar(x - 0.2, [3, 5], width=0.4, label="A")
right = plt.bar(x + 0.2, [4, 2], width=0.4, label="B")
plt.xticks(x, ["X", "Y"])
plt.legend()
print([round(bar.get_x() + bar.get_width() / 2, 1) for bar in left])
print([round(bar.get_x() + bar.get_width() / 2, 1) for bar in right])
Натиҷа:
[-0.2, 0.8]
[0.2, 1.2]
Ҳангоми паҳноии 0.4 марказҳои силсилаҳо аз мавқеи категория ба андозаи 0.2 кӯчидаанд. Агар ҳар ду маҷмӯъро дар як x бе кӯчиш кашем, росткунҷаҳо ҳамдигарро мепӯшонанд. Легенда мефаҳмонад, ки ҳар маҷмӯъ ба кадом силсила тааллуқ дорад.
6. Қисмҳои як бутун
pie бузургиҳои ғайриманфиро мегирад ва одатан ҳар якро ба ҷамъи онҳо тақсим мекунад. Ҷамъ бояд мусбат бошад. Сектор қисми доира аст, ки кунҷаш ба ҳисса мутаносиб мебошад. labels номҳо ва autopct формати фоизҳоро муайян мекунад.
import matplotlib.pyplot as plt
wedges, labels, percentages = plt.pie(
[2, 3, 5], labels=["A", "B", "C"], autopct="%1.0f%%")
print([text.get_text() for text in labels])
print([text.get_text() for text in percentages])
print([round(wedge.theta2 - wedge.theta1) for wedge in wedges])
Натиҷа:
['A', 'B', 'C']
['20%', '30%', '50%']
[72, 108, 180]
Ададҳои 2, 3 ва 5 натиҷаи 20%, 30% ва 50% доданд, гарчанде вуруд фоиз набуд. Сатри %1.0f%% навиштаҷотро то фоизи бутун гирд мекунад; %1.1f%% як рақам пас аз нуқтаро мемонад. Ҷамъи навиштаҷоти гирдшуда ҳатман маҳз 100 намешавад. Ҳангоми autopct се маҷмӯъ бармегардад: секторҳо, номҳо ва фоизҳо; бе он танҳо ду маҷмӯи аввал.
Қимати сифр метавонад ном ва сектори кунҷаш сифрро нигоҳ дорад. Агар аз рӯйи маъно танҳо категорияҳои ғайрихолӣ лозим бошанд, маълумотро пешакӣ омода кунед. Барои ҳиссаҳои хурди зиёд одатан сутунҳо беҳтаранд: кунҷҳои монандро муқоиса кардан душвор аст.
Дар дохил чӣ рӯй медиҳад?
Барои категорияҳои сатрӣ matplotlib мавқеъҳои ададӣ сохта, онҳоро ба номҳо мепайвандад. bar росткунҷаҳои Rectangle ва pie секторҳои Wedge илова мекунад. Инҳо объектҳои гуногунанд: аз росткунҷа баландӣ, аз сектор кунҷҳоро бо theta1 ва theta2 мехонанд. Дар мисол ҷамъи кунҷҳо 360 дараҷа аст.
Диаграмма тартиб ва геометрияро нигоҳ медорад, вале маънои номҳоро намедонад. Номҳои сатрии такрорӣ як мавқеъ мегиранд ва ду сутун метавонанд болои ҳам афтанд. Барои мушоҳидаҳои гуногун бо номҳои якхела мавқеъҳои алоҳидаи ададӣ дода, номҳоро бо xticks муайян кунед.
Хатоҳои маъмул ва ислоҳи онҳо
- Номҳо ва баландиҳо иваз шудаанд.
plt.bar([4, 7], ["A", "B"])сатрҳоро ба ҷойи қиматҳо медиҳад. matplotlib метавонад онҳоро категорияҳои меҳвари дигар ҳисоб кунад, на адад. Ислоҳ:plt.bar(["A", "B"], [4, 7]). - Танҳо ададҳо ҷудо мешаванд. Пас аз
values.sort()рӯйхати пешинаи номҳо дигар метавонад ба сутунҳо мувофиқ набошад. Ислоҳ: ҷуфтҳои(name, value)-ро бо қоидаи зарурӣ ҷудо кунед. - Ҳиссаи манфӣ.
plt.pie([2, -1])хатоиValueErrorмедиҳад. Ислоҳ: маъно ва дурустии маълумотро санҷед; қисмҳои бутун бояд ғайриманфӣ ва ҷамъашон мусбат бошад. - Формати нодурусти фоизҳо.
autopct="%1.0f%"хатои формат медиҳад. Ислоҳ:autopct="%1.0f%%"нависед, ки дар он%%аломати чопшавандаи фоиз аст.
Ёддошт
| Чӣ лозим аст | Восита |
|---|---|
| Сутунҳои амудӣ | plt.bar(names, values) |
| Сутунҳои уфуқӣ | plt.barh(names, values) |
| Ададҳо назди сутунҳо | plt.bar_label(bars) |
| Тартиб | омодасозии ҷуфтҳо пеш аз кашидан |
| Ду силсила паҳлуи ҳам | x-ҳои ададӣ, кӯчишҳо ва width |
| Ҳиссаҳои бутун | plt.pie(values, labels=names) |
| Фоизҳо | autopct="%1.0f%%" |