Друкарня від WE.UA

Створюємо стовпчикові графіки за допомогою plotly

Всіх вітаю! У цій статті пропоную вам зануритися у графіки та візуалізацію на Python за допомогою plotly. На цей раз ми втілимо стовпчикові графіки прослуховувань різних реп виконавців за місяць та графік з оцінками деяких їхніх альбомів за сайтом AOTY.

Підготовка

Встановлення plotly

Windows:

pip install plotly

MacOS:

pip3 install plotly

Linux:

pip install plotly

Створення списків з даними

Імпортуємо бібліотеку:

import plotly.graph_objects as go

Спершу нам треба створити список із значеннями, щоб потім їх візуалізувати. Дані про кількість прослуховувань за місяць були взяті зі Spotify.

Отже, ось наші готові дані:

x = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole", "A$AP Rocky", "Nas",
     "Travis Scott", "21 Savage", "Pusha T", "Tyler, The Creator", "Lil Baby", "Dr. Dre", "Snoop Dogg", "2Pac",
     "The Notorious B.I.G.", "Wiz Khalifa", "Central Cee"]

y = [40520489, 73310969, 46514936, 74929387, 48226508, 54879735, 39121626, 47108369, 9384635, 60529505, 41217352,
     5574622, 39509505, 31399992, 24295716, 31792147, 28141092, 26072294, 43335258, 24837881]

Етапи створення візуалізації

Створення загального графіка

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

Ось повний код нашого першого графіка:

import plotly.graph_objects as go


x = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole", "A$AP Rocky", "Nas",
     "Travis Scott", "21 Savage", "Pusha T", "Tyler, The Creator", "Lil Baby", "Dr. Dre", "Snoop Dogg", "2Pac",
     "The Notorious B.I.G.", "Wiz Khalifa", "Central Cee"]

y = [40520489, 73310969, 46514936, 74929387, 48226508, 54879735, 39121626, 47108369, 9384635, 60529505, 41217352,
     5574622, 39509505, 31399992, 24295716, 31792147, 28141092, 26072294, 43335258, 24837881]

bar_figure = go.Figure(data=[go.Bar(x=x, y=y)])
bar_figure.update_layout(title_text="Топ 20 реп виконавців")
bar_figure.show()

Тут ми створюємо сам графік із стовпців та вказуємо значення x та y:

bar_figure = go.Figure(data=[go.Bar(x=x, y=y)])

За допомогою метода update_layout() вказуэмо заголовок:

bar_figure.update_layout(title_text="Топ 20 реп виконавців")

Відображаємо створений графік:

bar_figure.show()

Ось результат:

Наш перший графік

Графік вийшов чудовим, але я думаю слід додати йому інший колір та тему. Тому змінюємо колір стовпців на відтінок синього за допомогою параметра marker_color:

bar_figure = go.Figure(data=[go.Bar(x=x, y=y, marker_color="#409151")])

Тепер додаємо темну тему за допомогою параметра template у методі update_layout():

bar_figure.update_layout(title_text="Топ 20 реп виконавців", template="plotly_dark")

Тема plotly_dark — це стандартна темна тема для plotly.

Ось видозмінений код:

import plotly.graph_objects as go


x = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole", "A$AP Rocky", "Nas",
     "Travis Scott", "21 Savage", "Pusha T", "Tyler, The Creator", "Lil Baby", "Dr. Dre", "Snoop Dogg", "2Pac",
     "The Notorious B.I.G.", "Wiz Khalifa", "Central Cee"]

y = [40520489, 73310969, 46514936, 74929387, 48226508, 54879735, 39121626, 47108369, 9384635, 60529505, 41217352,
     5574622, 39509505, 31399992, 24295716, 31792147, 28141092, 26072294, 43335258, 24837881]

bar_figure = go.Figure(data=[go.Bar(x=x, y=y, marker_color="#409151")])
bar_figure.update_layout(title_text="Топ 20 реп виконавців", template="plotly_dark")
bar_figure.show()

Результат:

Покращений графік

Категоризація графіка

Також ми можемо дещо відредагувати наш графік. Зараз він виглядає красивим, але водночас є дуже простим. Я пропоную розділити графік на категорії, щоб виконавці, що мають сорок і більше мільйонів прослуховувань були позначені окремою категорією від тих, що мають менше сорока мільйонів прослуховувань.

Ось код, який оновить наш графік:

part_one_names = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "A$AP Rocky",
                  "Travis Scott", "21 Savage", "Wiz Khalifa"]

part_one_data = [40520489, 73310969, 46514936, 74929387, 48226508, 54879735, 47108369, 60529505, 41217352, 43335258]

part_two_names = ["J. Cole", "Nas", "Pusha T", "Tyler, The Creator", "Lil Baby", "Dr. Dre", "Snoop Dogg", "2Pac",
                  "The Notorious B.I.G.", "Central Cee"]
part_two_data = [39121626, 9384635, 5574622, 39509505, 31399992, 24295716, 31792147, 28141092, 26072294, 24837881]

bar_figure = go.Figure(data=[
     go.Bar(name=">= 40 мільйонів", x=part_one_names, y=part_one_data, marker_color="#409151"),
     go.Bar(name="< 40 мільйонів", x=part_two_names, y=part_two_data, marker_color="#8ba955")
])

bar_figure.update_layout(title_text="Топ 20 реп виконавців", template="plotly_dark")
bar_figure.show()

Результат:

Графік, що розділений на дві категорії

Згрупований графік

Тепер пропоную згрупувати наш графік так, щоб під одним значенням по осі x були два стовпчики. Для цього, ми візьмемо по альбому з кожного виконавця та відобразимо його оцінки, зроблені критиками і користувачами.

Оцінки альбомів взяті із сайту AOTY.

Отже, ось зібрані дані:

albums_titles = ["The Blueprint", "The Eminem Show", "Get Rich or Die Tryin'",
                 "To Pimp a Butterfly", "Tha Carter II", "DS2",
                 "2014 Forest Hills Drive"]

authors = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole"]

critic_scores = [85, 75, 74, 95, 79, 77, 69]
user_scores = [88, 82, 77, 95, 82, 80, 79]

Ось повний код:

albums_titles = ["The Blueprint", "The Eminem Show", "Get Rich or Die Tryin'",
                 "To Pimp a Butterfly", "Tha Carter II", "DS2",
                 "2014 Forest Hills Drive"]

authors = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole"]

critic_scores = [85, 75, 74, 95, 79, 77, 69]
user_scores = [88, 82, 77, 95, 82, 80, 79]

bar_figure = go.Figure(data=[
     go.Bar(name="Critic score", x=albums_titles, y=critic_scores,
            marker_color="#a2767f",
            text=authors,
            textposition="inside"),
     go.Bar(name="User score", x=albums_titles, y=user_scores,
            marker_color="#d9898c",
            text=authors,
            textposition="inside")])

bar_figure.update_layout(title_text="Оцінки альбомів на AOTY", template="plotly_dark", barmode="group")
bar_figure.show()

У цьому графіку необхідно також додати й псевдоніми виконавців, тому спершу нам треба вказати, звідки саме ми будемо брати псевдоніми.

Для цього, у plotly є параметр text:

bar_figure = go.Figure(data=[
     go.Bar(name="Critic score", x=albums_titles, y=critic_scores,
            marker_color="#a2767f", 
            text=authors, 
            textposition="inside"),
     go.Bar(name="User score", x=albums_titles, y=user_scores, 
            marker_color="#d9898c",
            text=authors, 
            textposition="inside")])

Отже, ми взяли псевдоніми зі списку authors, але тепер нам треба подумати над їхнім розташуванням на графіку. Для розташування псевдонімів виконавців ми використаємо параметр textposition, де вказали їх положення всередині стовпців (передали значення inside).

Тут, окрім заголовку та теми, надаємо значення “group“ параметру barmode, щоб отримати згрупований графік:

bar_figure.update_layout(title_text="Оцінки альбомів на AOTY", template="plotly_dark", barmode="group")

Результат:

Оцінки альбомів на AOTY

Складений графік

Крім згруповування, ми ще можемо скласти графік так, щоб стовпці були один на одному. Для втілення такого типу графіка варто надати значення “stack” у параметр barmode.

Ось повний код:

albums_titles = ["The Blueprint", "The Eminem Show", "Get Rich or Die Tryin'",
                 "To Pimp a Butterfly", "Tha Carter II", "DS2",
                 "2014 Forest Hills Drive"]

authors = ["JAY-Z", "Eminem", "50 Cent", "Kendrick Lamar", "Lil Wayne", "Future", "J. Cole"]

critic_scores = [85, 75, 74, 95, 79, 77, 69]
user_scores = [88, 82, 77, 95, 82, 80, 79]

bar_figure = go.Figure(data=[
     go.Bar(name="Critic score", x=albums_titles, y=critic_scores,
            marker_color="#f4b176",
            text=authors,
            textposition="inside"),
     go.Bar(name="User score", x=albums_titles, y=user_scores,
            marker_color="#c1be7f",
            text=authors,
            textposition="inside")])

bar_figure.update_layout(title_text="Оцінки альбомів на AOTY", template="plotly_dark", barmode="stack")
bar_figure.show()

Резульат:

Складений графік

Висновок

У даній статті ми навчилися створювати стовпчикові графіки різного типу (категоризовані, згруповані, складені) та стилізовувати їх на різні смаки. Дякую за увагу!

Список джерел
  1. JAY-Z - кількість прослуховувань за місяць
  2. Eminem - кількість прослуховувань за місяць
  3. 50 Cent - кількість прослуховувань за місяць
  4. Kendrick Lamar - кількість прослуховувань за місяць
  5. Lil Wayne - кількість прослуховувань за місяць
  6. Future - кількість прослуховувань за місяць
  7. J. Cole - кількість прослуховувань за місяць
  8. A$AP Rocky - кількість прослуховувань за місяць
  9. Nas - кількість прослуховувань за місяць
  10. Travis Scott - кількість прослуховувань за місяць
  11. 21 Savage - кількість прослуховувань за місяць
  12. Pusha T - кількість прослуховувань за місяць
  13. Tyler, The Creator - кількість прослуховувань за місяць
  14. Lil Baby - кількість прослуховувань за місяць
  15. Dr. Dre - кількість прослуховувань за місяць
  16. Snoop Dogg - кількість прослуховувань за місяць
  17. 2Pac - кількість прослуховувань за місяць
  18. The Notorious B.I.G. - кількість прослуховувань за місяць
  19. Wiz Khalifa - кількість прослуховувань за місяць
  20. JAY-Z - The Blueprint. Оцінка альбому
  21. Eminem - The Eminem Show. Оцінка альбому
  22. Kendrick Lamar - To Pimp a Butterfly. Оцінка альбому
  23. 50 Cent - Get Rich or Die Tryin'. Оцінка альбому
  24. Lil Wayne - Tha Carter II. Оцінка альбому
  25. Future - DS 2. Оцінка альбому
  26. J. Cole - 2014 Forest Hills Drive. Оцінка альбому

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Magnifique numérique
Magnifique numérique@magnifiquedigitalworld

Прекрасний цифровий світ

102Довгочити
3.2KПерегляди
28Підписники
На Друкарні з 14 липня 2025

Більше від автора

  • Brandlogo - сайт з надихаючими прикладами логотипів

    Brandlogo — це сайт, який містить велику кількість готових прикладів логотипів, що можуть покращити ваші дизайнерські навички та значно вплинути на загальне натхнення.

    Теми цього довгочиту:

    Дизайн
  • Ресурси для знаходження навчальних датасетів

    У цій статті ми розглянемо одразу два сайти, де можна лешко знайди ціквий датасет для використання у навчальних цілях.

    Теми цього довгочиту:

    It

Це також може зацікавити:

  • Яку сферу в ІТ обрати у 2025–2030 роках: куди рухається ринок?

    Усе про вибір ІТ-напрямку на 2025–2030 роки: топові сфери (AI, кібербезпека, DevOps, UX/UI, Data Science), ролі, зарплати, потрібні навички та поради, як знайти свою нішу. Для початківців і тих, хто хоче змінити напрям.

    Теми цього довгочиту:

    Іт-індустрія
  • Java. Що я б запитував на технічному інтерв’ю?

    Десь вискочив OutOfMemory. Як взнати, що є причиною? Чи достатньо буде треддампу (в нас є декілька потоків, аутофмеморі міг викинутися в іншому потоці, який просто десь створив новий об'єкт, але реальна проблема в іншому потоці)?

    Теми цього довгочиту:

    Java
  • хмарне сховище MEGA 20Gb безкоштовно назавжди

    Чим дорожить кожен з нас ? Фотографіями, файлами з відео, музикою, документами... Загалом пам'яттю та інформацією. намагаємося зберегти назавжди, мати до цих даних простий і швидкий доступ. Безпечно і надійно зберігати цінну інформацію. Карту пам'яті легко загубити

    Теми цього довгочиту:

    Корисні Програми

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • Яку сферу в ІТ обрати у 2025–2030 роках: куди рухається ринок?

    Усе про вибір ІТ-напрямку на 2025–2030 роки: топові сфери (AI, кібербезпека, DevOps, UX/UI, Data Science), ролі, зарплати, потрібні навички та поради, як знайти свою нішу. Для початківців і тих, хто хоче змінити напрям.

    Теми цього довгочиту:

    Іт-індустрія
  • Java. Що я б запитував на технічному інтерв’ю?

    Десь вискочив OutOfMemory. Як взнати, що є причиною? Чи достатньо буде треддампу (в нас є декілька потоків, аутофмеморі міг викинутися в іншому потоці, який просто десь створив новий об'єкт, але реальна проблема в іншому потоці)?

    Теми цього довгочиту:

    Java
  • хмарне сховище MEGA 20Gb безкоштовно назавжди

    Чим дорожить кожен з нас ? Фотографіями, файлами з відео, музикою, документами... Загалом пам'яттю та інформацією. намагаємося зберегти назавжди, мати до цих даних простий і швидкий доступ. Безпечно і надійно зберігати цінну інформацію. Карту пам'яті легко загубити

    Теми цього довгочиту:

    Корисні Програми